У Magetno 2 однією із нових властивостей є віртуальні типи (Magento 2 Virtual Type). Для чого вони?
Уявіть, що вам уже доступний клас 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, який унаслідуватимется від А, проте він повинен приймати інший аргумент в якості $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 у та помістіть у ного код:
<?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, кастомний cron, отримувати дані про магазин та багато іншої корисної інформації.