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

覆盖Magento中的Mage/Core/Controller/Varien/Action,magento,Magento,我已经尽了最大努力来解决这个问题,但我似乎无法在Magento中覆盖以下控制器: Mage/Core/Controller/Varian/Action 现在,我的扩展名有以下文件: app/local/MyCompany/MyModule/Core/Controller/Front/Action.php app/local/MyCompany/MyModule/Core/etc/config.xml app/etc/modules/MyCompany\u MyModule.xml 我的困惑在于c

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

Mage/Core/Controller/Varian/Action

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

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

app/local/MyCompany/MyModule/Core/etc/config.xml

app/etc/modules/MyCompany\u MyModule.xml

我的困惑在于config.xml。我以前覆盖了控制器目录中的控制器,但没有覆盖控制器。我不完全清楚两者之间的区别,或者覆盖控制器目录中文件的方法是否不同

下面是我在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>

0.0.1
MyCompany\u MyModule\u Core\u Controller\u Front\u Action

有人能告诉我我错过了什么吗

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


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

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


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

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


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

您无法通过Magento配置的类名重写来完成所需的操作。如果您注意到,您正在更改一个超类(其他类从中扩展),并且通过
Varien\u Autoload::Autoload()
中的自动加载逻辑发现类定义


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

自从Magento控制器上的声明之后

class Mage\u Catalog\u ProductController扩展Mage\u Core\u Controller\u Front\u动作

If直接扩展了类。我所做的是以某种方式更换所有的控制器

class Mage\u Catalog\u ProductController扩展MyCompany\u Core\u Controller\u Front\u Action

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


find app/code/core/Mage/*/controllers/-name“*.php”-print | xargs sed-i's/MagecoreControlleru FrontAction/MyCompanycoreControllerFrontAction/g'

自magento控制器声明以来

class Mage\u Catalog\u ProductController扩展Mage\u Core\u Controller\u Front\u动作

If直接扩展了类。我所做的是以某种方式更换所有的控制器

class Mage\u Catalog\u ProductController扩展MyCompany\u Core\u Controller\u Front\u Action

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


查找app/code/core/Mage/*/controllers/-name“*.php”-print | xargs sed-i's/Mage_core_Controller_Front_Action/MyCompany_core_Controller_Front_Action/g'

正确。有一种机制可以在frontname下添加额外的模块目录,但不会像块、助手、模型和资源模型那样重写类名。正确。有一种机制可以在frontname下添加额外的模块目录,但不会像块、助手、模型和资源模型那样重写类名。您想更改什么?也许还有别的办法。你想改变什么?可能还有另一种方法。这很糟糕:P我的最终目标是,如果特定的cookie值不存在,将前端的用户重定向到另一个页面。你认为重写Action.php类是解决这个问题的正确方法吗?我决定重写app/code/core/Mage/Page/block/Html.php中的Html块。由于Magento中的几乎每个页面都加载在Html块中,因此很容易在该块类的构造函数中集成重定向函数。通过观察预呈现事件,您可以采用更适合框架的方法,减少攻击性。请参阅
Mage\u Core\u controller\u Varien\u action
中的
controller\u action\u predispatch
事件。谢谢Ben!我对事件观察员一无所知。我用你建议的方法代替。使用Magento的框架有很多东西需要学习,所以我很欣赏所传递的所有知识:)这太糟糕了:P如果不存在特定的cookie值,我的最终目标是将前端的用户重定向到另一个页面。你认为重写Action.php类是解决这个问题的正确方法吗?我决定重写app/code/core/Mage/Page/block/Html.php中的Html块。由于Magento中的几乎每个页面都加载在Html块中,因此很容易在该块类的构造函数中集成重定向函数。您可以使用更适合框架的方法,以更少的侵入性完成此操作