У 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 2 та навчіться створювати базовий модуль Magento, кастомний cron, отримувати дані про магазин та багато іншої корисної інформації.