在Magento中覆盖Mage / Core / Controller / Varien / Action

时间:2012-04-13 16:45:25

标签: magento

我已尽力解决这个问题,但我似乎无法在Magento中覆盖以下控制器:

法/核心/控制器/瓦里安/动作

现在我的扩展程序有以下文件:

应用/本地/ MyCompany的/ MyModule的/核心/控制器/前/ action.php的

应用/本地/ MyCompany的/ MyModule的/核心的/ etc / config.xml中

应用的/ etc /模块/ MyCompany_MyModule.xml

我的困惑在于config.xml。我之前已经覆盖了控制器目录中的控制器,但没有覆盖控制器。我不完全清楚差异,或者是否覆盖Controller目录中的文件的方法不同。

这是我在config.xml中的内容

    <?xml version="1.0"?>
    <config>
        <modules>
            <MyCompany_MyModule>
                <version>0.0.1</version>
            </MyCompany_MyModule>
        </modules>
        <global>
            <controller>
                <Mage_Core>
                    <rewrite>
                        <front_action>MyCompany_MyModule_Core_Controller_Front_Action</front_action>
                    </rewrite>
                </Mage_Core>
            </controllers>
        </global>
    </config>

有人可以告诉我我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

您无法通过Magento配置的类名重写来完成您想要的任务。如果您注意到,您正在更改超类(从其扩展的其他类),并且通过Varien_Autoload::autoload()中的自动加载逻辑发现类定义。

如果您必须更改此类的定义,则可以将整个文件复制到 app / code / local / Mage / Core / Controller / Varien / 并在那里进行更改。您需要在升级Magento时随时将更新合并到此类。

答案 1 :(得分:0)

我也曾经修改过控制器功能,但我想我最后只修补了原来的控制器而不是覆盖它。我可能错了,但我认为Magento不支持覆盖Controller类。

如果我没记错的话,在某些方面甚至会在代码中静态调用它们。

答案 2 :(得分:0)

自magento控制器上的声明

class Mage_Catalog_ProductController extends Mage_Core_Controller_Front_Action

如果直接扩展了课程。我所做的是以某种方式替换所有控制器。

class Mage_Catalog_ProductController extends MyCompany_Core_Controller_Front_Action

要替换所有控制器,我使用此linux命令

find app/code/core/Mage/*/controllers/ -name "*.php" -print | xargs sed -i 's/Mage_Core_Controller_Front_Action/MyCompany_Core_Controller_Front_Action/g'