覆盖Magento中的Mage/Core/Controller/Varien/Action
我已经尽了最大努力来解决这个问题,但我似乎无法在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中的内容覆盖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
<?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/MagecoreControlleru FrontAction/MyCompanycoreControllerFrontAction/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块中,因此很容易在该块类的构造函数中集成重定向函数。您可以使用更适合框架的方法,以更少的侵入性完成此操作