Reescrita de Classe Magento 1 no Magento 2 com Sistema de Injeção de Dependência


10

Analisando o código principal do Magento 2 , parece que o sistema de reescrita de classe antiga foi arrancado e substituído por um novo sistema de injeção de dependência.

Infelizmente, não há documentação para este novo sistema.

Alguém tem um exemplo de configuração de módulo que permita que um usuário, no Magento 2, "reescreva" a classe Mage_Catalog_Model_Productcom uma nova classe Packagename_Modulename_Model_Product, usando o novo sistema de injeção de dependência?


Eu pensei que as perguntas do Magento 2.0 ainda não eram permitidas meta.magento.stackexchange.com/questions/79/…
Marius

Respostas:


10

A configuração Di foi movida para os arquivos di.xml e o formato foi modificado. Agora, as preferências têm esta aparência (di.xml):

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

se for uma reescrita de classe, é preferível usar um plug-in em vez de um nó de preferência?
Huzefam 29/10/2015

2
Se você precisar substituir o comportamento de alguma classe principal, use preferência. Se você precisar substituir o comportamento de algum método principal, você deve usar o plug-in com o ouvinte around que não chamará $ continue (). Se você precisar adicionar comportamento a algum método ou classe principal, use plugins.
Anton Kril 31/10/2015

5

Trabalhando de dentro para fora, consegui reescrever trabalhando com os seguintes

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

No entanto, há muito mais código de sistema na implementação da injeção de dependência, portanto, não está claro se o acima funcionará na versão final lançada do Magento 2.


Parece que eles basicamente renomearam "alias" para preferências e o moveram para o topo? Interessante. Estou ansioso para ver as atualizações da documentação lançadas. Peter disse que eles têm, mas tudo não foi enviado ao site de documentos, pelo menos IIRC.
Davidalger #

5

Você está correto, as reescritas de classe foram totalmente eliminadas e substituídas por DI. As seguintes notas são da seção sobre alterações no Application Framework :

Magento 1.x - Nó: / global // {subcaminho que corresponde ao nome da fábrica + literal "reescrever"}

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

Magento 2.x - Nó: / global / di / aliases

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

Eu não tentei utilizar isso em um módulo em execução no Magento 2.0, mas parece que você basicamente define um alias para o nome da classe em vez de usar a hierarquia complicada do xml para reescritas por módulo.


1
+1 na página Application Framework, mas isso não funciona no instantâneo mais recente do Magento 2 que eu peguei.
perfil completo de Alan Storm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.