Magento Enterprise控制器覆盖

时间:2011-11-04 09:32:46

标签: php magento controllers

我正在尝试覆盖Enterprise / CatalogEvent / controllers / Adminhtml / Catalog / EventController.php。

问题是config.xml。我如何遵循Magento的命名约定。 以下是config.xml文件

<admin>
        <routers>
            <adminhtml>
                    <args>
                        <modules>
                            <Mynamespace_catalogevent before="Enterprise_CatalogEvent">Mynamespace_CatalogEvent_Adminhtml</Mynamespace_catalogevent>
                        </modules>
                    </args>
             </adminhtml>
        </routers>
</admin>

2 个答案:

答案 0 :(得分:3)

根据上面看似正确的xpath和属性,你需要在Mynamespace / CatalogEvent / controllers / Adminhtml /下有一个EventController.php文件。

这种重写风格是Magento的最新版本(不赞成以前的方法)。实际上,您是在Enterprise目录之前注入一个目录,并且路由将从那里开始。由于控制器类定义不可用于自动装带器,因此通过获取模块参数并将其转换为目录来包含它们。在核心Magento路由中,虽然控制器文件是通过Mage_Core_Controller_Varien_Router_Standard::getControllerFileName()Mage_Core_Model_Config::getModuleDir()(以及其他)确定的。它的评估方式意味着在模块中的两个目录级别之后(例如Mynamespace / CatalogEvent),下一个目录将是“控制器”。

确保您的EventController类定义符合上述定义,您的操作与您要覆盖的操作相匹配,并且您的类名与您的路径匹配,您将会很高兴。

困难的是,如果关于您的结构和语法(保存不正确的类名)有任何“关闭”,路由器将最终解析为Enterprise动作控制器。

答案 1 :(得分:0)

我遇到了类似的问题,我的问题的简单解决方案是确保该类的_Adminthml部分包含在我的本地控制器以及我覆盖的控制器中。在你的情况下:

<Mynamespace_catalogevent before="Enterprise_CatalogEvent_Adminhtml">
    Mynamespace_CatalogEvent_Adminhtml
</Mynamespace_catalogevent>

您的示例缺少_Adminhtml属性上的before

这是在Magento Enterprise v1.12.0.2

希望这有帮助。