Magento 1 класс переписывает в Magento 2 с системой инъекции зависимостей
Вопрос
Касаться Основной код Magento 2, Похоже, что система переписывания старого класса была вырвана и заменена новой системой впрыска зависимостей.
К сожалению, есть Нет документации Для этой новой системы.
У кого -нибудь есть образец конфигурации модуля, который позволил бы пользователю, в Magento 2, «переписать» класс Mage_Catalog_Model_Product
с новым классом Packagename_Modulename_Model_Product
, используя новую систему впрыска зависимостей?
Решение
Конфигурация DI была перемещена в файлы di.xml, а формат был изменен. Теперь предпочтения выглядят так (di.xml):
<config>
<preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>
Другие советы
Работая изнутри, я смог переписать, работая со следующим
<global>
<di>
<preferences>
<Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
</preferences>
</di>
</global>
Тем не менее, в реализации инъекции зависимостей есть гораздо больше системных кодов, поэтому неясно, будет ли вышеупомянутое работать в окончательной выпущенной версии Magento 2.
Вы правы, переписывания классов были полностью устранены и заменены DI. Следующие примечания из раздела о Прикладная структура меняется:
Magento 1.x -Узел:/Global // {подпад, который соответствует заводскому имени + "Переписать" Literal}
<global>
...
<models>
<core>
<rewrite>
<url>My_Module_Model_Url</url>
</rewrite>
</core>
</models>
...
</global>
Magento 2.x - Узел:/Global/Di/Aliases
<global>
...
<di>
<aliases>
<Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
</aliases>
</di>
...
</global>
Я не пробовал использовать это в модуле, работающем в Magento 2.0, но кажется, что вы в основном определяете псевдоним для имени класса вместо того, чтобы использовать сложную иерархию XML для переписываний для каждого модуля.