【问题标题】:Magento Enterprise controller overrideMagento Enterprise 控制器覆盖
【发布时间】:2011-11-04 09:32:46
【问题描述】:

我正在尝试覆盖 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>

【问题讨论】:

  • 它不起作用.. 抱歉回复晚了...

标签: php magento controllers


【解决方案1】:

根据上面看似正确的 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 类定义根据上述定位,您的操作与您要覆盖的操作相匹配,并且您的类名与您的路径相匹配,然后您就可以开始了。

困难在于,如果您的结构和语法有任何“错误”(保存不正确的类名),路由器最终将解析为企业操作控制器。

【讨论】:

  • 您好,我遇到了一个非常相似的问题,我很抱歉,但上面的内容似乎与我无关。可能是因为它是星期五下午 5 点。你能否举一个文件结构的例子,也许还有一些关于这种新的重写方式的代码例子?或者至少给出一个链接到某个地方有这个?这是我的问题,仅供参考:stackoverflow.com/questions/16483967/…
【解决方案2】:

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

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

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

这是 Magento Enterprise v1.12.0.2

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多