0

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

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

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

app/local/MyCompany/MyModule/Core/Controller/Front/Action.php

应用程序/本地/MyCompany/MyModule/Core/etc/config.xml

应用程序/etc/modules/MyCompany_MyModule.xml

我的困惑在于 config.xml。我之前覆盖了在controllers目录中找到的 Controllers ,但没有覆盖Controller。我不完全清楚区别,或者在 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>

有人可以让我知道我错过了什么吗?

4

3 回答 3

4

您无法通过 Magento 配置的类名重写来完成您想要的。如果您注意到,您正在更改一个超类(其他类从它扩展),并且类定义的发现是通过Varien_Autoload::autoload().

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

于 2012-04-13T17:51:45.973 回答
0

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

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

于 2012-04-13T16:48:45.333 回答
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'

于 2013-05-21T08:37:05.490 回答