具有依赖注入系统的Magento 2中的Magento 1类重写


10

围绕Magento 2的核心代码,看起来旧的类重写系统已被删除并被新的依赖项注入系统代替。

不幸的是,没有关于这个新系统的文档

是否有人拥有模块配置示例,该示例可让用户在Magento 2中使用新的依赖项注入系统使用Mage_Catalog_Model_Product新的类“重写”该类Packagename_Modulename_Model_Product


我认为尚未允许使用Magento 2.0问题meta.magento.stackexchange.com/questions/79/…–
马吕斯

Answers:


10

Di配置已移至di.xml文件,并修改了格式。现在,首选项如下所示(di.xml):

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

如果是类重写,是否最好使用插件而不是首选项节点?
huzefam,2015年

2
如果需要替换某些核心类的行为,则应使用首选项。如果您需要替换某些核心方法的行为,则应使用带有环绕侦听器的插件,该插件不会调用$ proceed()。如果需要向某些核心方法或类添加行为,则应使用插件。
安东·克里尔

5

从内而外的工作,我能够重写以下内容

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

但是,在依赖注入实现中有更多的系统代码,因此尚不清楚上述内容是否可以在Magento 2的最终发行版中使用。


如此看来,他们基本上已将“别名”重命名为首选项并将其移至顶部?有趣。我期待看到文档更新。彼得说他们有,但是还没有全部发布到文档站点,至少是IIRC。
davidalger 2013年

5

没错,完全取消了类重写,并用DI代替了。以下注释来自“ 应用程序框架”更改部分

Magento 1.x-节点:/ global // {对应于工厂名称+“重写”文字的子路径}

<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层次结构进行每个模块的重写。


1
应用程序框架页面为+1,但这在我抓取的最新的Magento 2快照中不起作用。
艾伦·风暴
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.