当您运行基于 Magento 2平台的虚拟商店时,真的有必要在Magento 2中使用VirtualType吗?在Magento 2平台上,同时di.xml
支持两种类型的节点:节点type
和节点virtualtype
,而virtualtype
不是type
。在virtual tape
允许插入不同的依赖到现有的类,但不进行任何更改其他类。通过本教程,如何在Magento 2中创建和使用VirtualType。
在Magento 2中创建VirtualType
在Magento 2中创建虚拟类型意味着为现有类创建一个子类。所有这些都可以帮助您在Magento 2中创建虚拟类型。
<?php
class OurVirtualTypeName extends \Mageplaza\HelloWorld\Model\Virtualtype
{
}
将以下脚本代码插入到模块中,di.xml
以在Magento 2中创建虚拟类型。
#File: app/code/Mageplaza/HelloWorld/etc/di.xml
<config>
<!-- ... -->
<virtualType name="ourVirtualTypeName" type="Mageplaza\HelloWorld\Model\Virtualtype">
</virtualType>
</config>
即, 节点放置在主节点下 节点并包括两个属性:名称和类型。尽管name属性通常是该节点的通用特殊名称,但type属性是虚拟类型的真实PHP。
如您所见,对虚拟类型进行一些描述很简单。如果您清除缓存并重复请求,则输出仍然相同。
$ php bin/magento hw:tutorial-virtual-type
First, we'll report on the Mageplaza\HelloWorld\Model\Example object
The Property $property_of_example_object
is an object
created with the class:
Mageplaza\HelloWorld\Model\Virtualtype
Next, we're going to report on the Example object's one property (an Virtualtype class)
The Property $property_of_argument1_object
is an object
created with the class:
Mageplaza\HelloWorld\Model\Argument2
Finally, we'll report on an Virtualtype object, instantiated separate from Example
The Property $property_of_argument1_object
is an object
created with the class:
Mageplaza\HelloWorld\Model\Argument2
在Magento 2中使用虚拟类型
虚拟类型的功能取代了PHP类的位置,您不必使用 如果要自定义注入到Example类的构造函数中的参数,则配置如下。
#File: app/code/Mageplaza/HelloWorld/etc/di.xml
<config>
<!-- ... -->
<virtualType name="ourVirtualTypeName" type="Mageplaza\HelloWorld\Model\Virtualtype">
</virtualType>
<type name="Mageplaza\HelloWorld\Model\Example">
<arguments>
<argument name="the_object" xsi:type="object">Some\Other\Class</argument>
</arguments>
</type>
</config>
$ php bin/magento hw:tutorial-virtual-type
[ReflectionException]
Class Some\Other\Class does not exist
让我们使用虚拟类型走向聪明的方式。这意味着Some\Other\Class
可以通过ourVirtualTypeName恢复。您可以确保不会导致任何错误,除非您使用上面的命令调用该命令。
#File: app/code/Mageplaza/HelloWorld/etc/di.xml
<config>
<!-- ... -->
<virtualType name="ourVirtualTypeName" type="Mageplaza\HelloWorld\Model\Virtualtype">
</virtualType>
<type name="Mageplaza\HelloWorld\Model\Example">
<arguments>
<argument name="the_object" xsi:type="object">ourVirtualTypeName</argument>
</arguments>
</type>
</config>
感谢您的阅读,希望我们的虚拟类型创建和使用指南使您的业务变得更加完美