У Magento 2 однією з нових властивостей є віртуальний тип Magento 2. Для чого вони потрібні?

Уявіть, що у вас вже є клас A :

namespace VendorName\ModuleName\Model
class A
{
    protected $arg1;
    protected $arg2;
    protected $arg3;

    public function __construct(
        Argument1 $arg1,
        Argument2 $arg2,
        Argument3 $arg3
    ) {
        $this->arg1 = $arg1;
        $this->arg2 = $arg2;
        $this->arg3 = $arg3;
     }
}

, і вам потрібно створити клас B, , який буде успадкований від A. Однак, він повинен приймати інший аргумент, як $arg2. Для цього вам потрібно створити новий PHP-файл для класу B:

namespace Me\MyModule\Model
class B extends A
{
    public function __construct(
        Argument1 $arg1,
        SomeOtherArg $someOtherArg,
        Argument2 $arg3
    ) {
parent::__construct($arg1, $someOtherArg, $arg3)
     } }

. Але вам не потрібно робити це в Magento 2. У таких випадках створюються віртуальні типи. Тому створіть файл etc/di.xml у вашому файли модулів у Magento та додайте до нього наступний код:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <virtualType name="Me\MyModule\Model\B" type="VendorName\ModuleName\Model\A">
        <arguments>
            <argument name="arg2" xsi:type="string">SomeOtherArg</argument>
        </arguments>
     </virtualType>
</config>

Згенеруйте DI за допомогою команди::

php bin/magento setup:di:compile

Тепер ви можете використовувати Me\MyModule\Model\B

Дізнайтеся більше Поради щодо розробки на Magento 2 та дізнайтеся, як створювати Basic модулі Magento, користуватися власним cron, отримувати інформацію про магазин та багато іншої корисної інформації.