Magento 1 класс переписывает в Magento 2 с системой инъекции зависимостей

magento.stackexchange https://magento.stackexchange.com/questions/8190

  •  16-10-2019
  •  | 
  •  

Вопрос

Касаться Основной код 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 для переписываний для каждого модуля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top