La clase Magento 1 reescribe en Magento 2 con sistema de inyección de dependencia

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

  •  16-10-2019
  •  | 
  •  

Pregunta

Hurgando Código central de Magento 2, Parece que el sistema de reescritura de clase antigua ha sido arrancado y reemplazado por un nuevo sistema de inyección de dependencia.

Desafortunadamente, hay Sin documentación para este nuevo sistema.

¿Alguien tiene una muestra de configuración del módulo que permita a un usuario, en Magento 2, "reescribir" la clase? Mage_Catalog_Model_Product con una nueva clase Packagename_Modulename_Model_Product, usando el nuevo sistema de inyección de dependencia?

¿Fue útil?

Solución

La configuración DI se movió a archivos DI.XML, y el formato se modificó. Ahora las preferencias se ven así (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

Otros consejos

Trabajando desde adentro hacia afuera, pude obtener una reescritura trabajando con lo siguiente

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

Sin embargo, hay mucho más código de sistemas en la implementación de inyección de dependencia, por lo que no está claro si lo anterior funcionará en la versión final lanzada de Magento 2.

Tienes razón, las reescrituras de clase fueron eliminadas por completo y reemplazadas por DI. Las siguientes notas son de la sección en Cambios del marco de la aplicación:

Magento 1.x -nodo:/global // {subpath que corresponde al nombre de fábrica + "reescribir" literal}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x - nodo:/global/di/alias

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

No he intentado utilizar esto en un módulo que se ejecuta en Magento 2.0, pero parece que básicamente define un alias para el nombre de la clase en lugar de usar la complicada jerarquía de XML para reescrituras por módulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top