Magento Enterprise控制器覆盖


Magento Enterprise controller override

我试图覆盖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>

基于上面看似正确的xpath和属性,您将需要在Mynamespace/CatalogEvent/controllers/Adminhtml/下拥有一个EventController.php文件。

这种重写风格是Magento中最新的(不支持以前的方法)。实际上,您是在Enterprise目录之前注入一个目录,路由将从那里开始。因为自动加载器无法使用控制器类定义,所以它们是通过接受module参数并将其转换为目录来包含的。在核心Magento中,通过控制器文件的路由是通过Mage_Core_Controller_Varien_Router_Standard::getControllerFileName()Mage_Core_Model_Config::getModuleDir()(以及其他)确定的。它的评估方式意味着在模块中的两个目录级别之后(例如。Mynamespace/CatalogEvent),下一个目录将是"controllers"。

确保你的EventController类定义是根据上面的定位,你的动作匹配你要覆盖的动作,你的类名匹配你的路径,你就可以开始了。

困难的是,如果你的结构和语法有任何"关闭"的地方(保存不正确的类名),路由器最终会解析到Enterprise动作控制器。

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

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

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

这是在Magento Enterprise v1.12.0.2