magento2
Внедрение зависимости
Поиск…
Замена аргумента
<!-- <moduleDir>/etc/<area>/di.xml -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- ... -->
<type name="Vendor\Namespace\Model\SomeClass">
<arguments>
<argument name="object" xsi:type="object">Vendor\Namespace\Model\SomeOtherClass</argument>
</arguments>
</type>
</config>
Предпочтение класса
<!-- <moduleDir>/etc/<area>/di.xml -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- ... -->
<preference
for="Vendor\Namespace\Model\Example"
type="Vendor\Namespace\Model\AnotherExample" />
<!-- ... -->
</config>
Выше пример - синтаксис переопределенной базовой модели.
Вот список пунктов, которые расскажут вам, как сделать это возможным.
moduleDir - Каталог расширения. Например, расширение для
app/code/custom/extension
extension
- это ваш каталог, в котором будут размещены все необходимые папки расширения.area - area будет
frontend
илиadminhtml
frontend - если расширение будет использовать функциональность frontend, чем
di.xml
будетdi.xml
в эту папкуadminhtml - если расширение будет использовать функциональные возможности
di.xml
чемdi.xml
пойдет в эту папкупоэтому он будет
app/code/custom/extension/etc/frontend/di.xml
илиapp/code/custom/extension/etc/adminhtml/di.xml
Если вы хотите использовать обе функциональные возможности, чем файл
di.xml
будет напрямую в папкеetc
di.xml
не нужноadminhtml
папкуfrontend
илиadminhtml
. Например:app/code/custom/extension/etc/di.xml
for = "Vendor \ Namespace \ Model \ Example" здесь, путь к файлу, который переопределит функциональность нужной функции.
type = "Vendor \ Namespace \ Model \ AnotherExample" здесь, путь к файлу, который будет предоставлять функции, которые будут переопределяться по
step - 3
Инъекция конструктора
/**
* @var \Vendor\Module\Helper\Data
*/
protected $customHelper;
/**
* Constructor call
* @param \Vendor\Module\Helper\Data $customHelper
*/
public function __construct(
\Vendor\Module\Helper\Data $customHelper
)
{
$this->customHelper = $customHelper;
parent::__construct();
}