我正在尝试覆盖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>
答案 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
上希望这有帮助。