什么是magento2中的virtual type,magento2虚拟类型的使用方法详解

magento2中的虚拟类型-virtual types是一个比较难理解的地方,今天我们介绍一下magento2中的虚拟类型–virtual types.

magento2中的虚拟类型是Magento的一个非常巧妙的功能,它允许我们更改特定可注入依赖项的参数,从而更改特定类类型的行为。

<MAGENTO_DIR>/module checkout/etc/di.xml文件提供了virtualType及其用法的简单示例:

<virtualType name="Magento\Checkout\Model\Session\Storage" type="Magento\Framework\Session\Storage">
    <arguments>
        <argument name="namespace" xsi:type="string">checkout</argument>
    </arguments>
</virtualType>
<type name="Magento\Checkout\Model\Session">
    <arguments>
        <argument name="storage" xsi:type="object">Magento\Checkout\Model\Session\Storage</argument>
    </arguments>
</type>

这里的virtualType(实际上)通过将其构造函数的 n a m e s p a c e = ′ d e f a u l t ′ 参数重写为 namespace='default'参数重写为 namespace=default参数重写为namespace='checkout’来扩展Magento\Framework\Session\Storage。但是,这一更改本身并没有生效,因为必须首先使用Magento\Checkout\Model\Session\Storage虚拟类型。在这种情况下,它是通过类型定义使用的,其中存储参数完全被虚拟类型取代。

Magento中的大多数virtualType名称属性都采用了不存在的完全限定类名的形式,尽管这可以是PHP数组键中允许的任何字符组合。通过在整个<Magento_DIR>目录的di.xml文件中查找<virtualType字符串,我们可以看到Magento在其大多数模块中使用了数百个虚拟类型。

在Magento_LayeredNavigation模块下可以找到一个更复杂的虚拟类型使用示例。<Magento_DIR>/module layered navigation/etc/frontend/di.xml文件定义了两个虚拟类型,如下所示:

<virtualType name="Magento\LayeredNavigation\Block\Navigation\Category" type="Magento\LayeredNavigation\Block\Navigation">
    <arguments>
        <argument name="filterList" xsi:type="object">categoryFilterList</argument>
    </arguments>
</virtualType>
<virtualType name="Magento\LayeredNavigation\Block\Navigation\Search" type="Magento\LayeredNavigation\Block\Navigation">
    <arguments>
        <argument name="filterList" xsi:type="object">searchFilterList</argument>
    </arguments>
</virtualType>

这里,我们定义了两个虚拟类型,每个类型都更改了Magento\LayeredNavigation\Block\Navigation类的filterList参数。tegoryFilterList和searchFilterList是<Magento_DIR>/module catalog search/etc/di.xml中定义的另外两个虚拟类型的名称

然后,在布局文件中使用Magento\LayeredNavigation\Plock\Navigation\Category和Magento\layedNavigation\Block\Navigation\Search虚拟类型进行块定义,如下所示:

<!-- view/frontend/layout/catalog_category_view_type_layered.xml -->
<referenceContainer name="sidebar.main">
    <block class="Magento\LayeredNavigation\Block\Navigation\Category" ...
    </referenceContainer>
    <!-- view/frontend/layout/catalogsearch_result_index.xml -->
    <referenceContainer name="sidebar.main">
        <block class="Magento\LayeredNavigation\Block\Navigation\Search" ...
        </referenceContainer>

这实际上是告诉Magento,对于类别视图页面和搜索页面,使用类的虚拟类型,从而指示它完成虚拟类型中指定的所有参数更改。

以上内容来自于码小课–Magento专区:
magento-dn.png
码小课的magento专区包含了magento2开发的全栈内容,帮助大家完全尝试magento2开发技能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值