在Magento 2中查看模型

View Model(视图模型)是一个类,它允许您将数据和其他功能从表示业务逻辑的位置传递到模板。 它还可以提供从实体(例如产品)加载的数据。
例如产品。 视图模型允许开发人员通过提供易于测试和维护的单独类来简化模板和阻止类。

View Model(视图模型)类可以保存计算逻辑,数据查找,对象获取并将其直接传递给模板,因此模板的逻辑可以尽可能简单.

视图模型通常位于模块的名为ViewModel的目录中。 但是,视图模型类的位置不限于ViewModel目录。 您可以根据需要创建任意数量的视图模型,以提供所需的独立类集以及自己的逻辑。

课程概述

在本课程中,我们将学习以下内容:

  • 什么是视图模型?
  • 如何使用视图模型?
  • 何时使用视图模型?

查看模型示例

视图模型的概念很简单,同时功能强大。 让我们跳入示例以更好地了解创建流程。 为了实现视图模型,我们必须在ViewModel目录中创建一个PHP类。

class ProductViewModel
{
    private $resource;

    public function __construct(Resource $resource)
    {
        $this->resource = $resource;
    }

    public function getProductBySku(string $sku): ProductInterface
    {
         return $this->resource->load($sku, ‘sku’);
    }
}

唯一的要求是ProductViewModel类必须实现Magento \ Framework \ View \ Element \ Block \ ArgumentInterface。 让我们添加它。

use Magento\Framework\View\Element\Block\ArgumentInterface;

class ProductViewModel implements ArgumentInterface
{
    //...
}

创建视图模型类后,我们必须将其添加到布局XML文件中。 因此,在布局渲染期间,它将找到视图模型类,将其实例化并添加到Block类依赖项的池中。

布局XML文件应位于模块的view / frontend / layout目录中。 在“模板和布局”渲染课程中,我们讨论了不同的布局配置区域。 确保检查课程以更好地了解布局xml文件的前端和adminhtml目录位置。

在布局文件中,我们必须在and中添加新节点。 这两个属性应该添加到节点上,即视图模型变量的名称及其类型,该类型应始终设置为对象,因为我们传递了必须作为视图模型启动的类名。

<?xml version="1.0"?>
<page>
    <body>
        <referenceBlock name="block.name">
            <arguments>
                <argument 
                    name="view_model" 
                    xsi:type="object">MageMastery\ViewModelExample\ViewModel\ProductViewModel</argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

在上面的示例中,“ block.name”可以是要在其中添加View Model类的块的名称。

在节点内部,我们必须提供视图模型的完整类名。 记住,作为视图模型注入来阻塞参数的所有对象都应实现ArgumentInterface接口。

最后,我们添加了视图模型类的模块模板可以访问视图模型。 视图模型对象作为模板对象的参数传递。 通过提供我们在布局XML文件中提供的参数名称,可以通过getData()方法对其进行访问。

/** @var ProductData $productData */
$productData = $block->getData(“view_model”);

在获得对视图模型的访问后,我们可以开始在模板中使用它。

<h1><?= $productData->getProductBySku(‘sku’); ?></h1>

结果,由视图模型类提供的数据由模板呈现。

查看模型清单

我们来回顾一下创建和使用视图模型所需的内容。

  • 创建一个PHP类
  • 添加一个ArgumentInterface
  • 将PHP类添加到布局xml中
  • 在模板中检索视图模型
  • 使用视图模型公共方法

何时使用视图模型?

每当您必须将数据从存储或其他对象传递到模板进行渲染时,都应使用视图模型。 它包括计算逻辑,数据查找,对象提取等。

必须使用视图模型代替块,因此您的代码将较少依赖Magento 2框架中的块更改。

##结论Magento 2中的视图模型是一种强大的机制,它使我们能够表示并提供准备在模板中呈现的数据。 它提供了一个简单的工具,建议每次添加UI自定义项时使用。