【问题标题】:Can you create more than one controller to override the same Magento core controller?你可以创建多个控制器来覆盖同一个 Magento 核心控制器吗?
【发布时间】:2014-01-18 03:43:50
【问题描述】:

你可以创建多个控制器来覆盖同一个 Magento 核心控制器吗?例如,我可以创建两个模块,在每个模块中创建一个 AccountController.php 来覆盖 Magento 在 Mage/Customer 中的核心 AccountController? 如果两个模块依赖于保存核心模块并覆盖同一个控制器,是否会产生冲突,当然每个控制器都会覆盖核心控制器中的不同操作。

【问题讨论】:

    标签: php magento controller


    【解决方案1】:

    是的,您可以创建多个模块来扩展同一个核心控制器。

    首先您需要包含核心控制器,然后仅重载您想要的特定功能。

    require_once 'Mage/Customer/controllers/AccountController.php';
    class Namespace_Module1_AccountController extends Mage_Customer_AccountController
    {
         public function indexAction(){
    
           //this will overload the index action for the core customer AccountController
    
         }
    }
    

    对您创建的每个模块重复此操作,并且仅重载您希望更改的操作。例如,如果您希望第二个模块重载您将执行的保存操作。

    require_once 'Mage/Customer/controllers/AccountController.php';
    class Namespace_Module2_AccountController extends Mage_Customer_AccountController
    {
         public function saveAction(){
    
           //this will overload the save action for the core customer AccountController 
           //this will also leave your index action overload from the other module in place
    
         }
    }
    

    【讨论】:

    • 但是如果两个模块都使用相同的功能,那么它将如何工作?两者或一个都行?还是会发生任何冲突/错误?
    • 我还没有测试过这个,但我相信如果两个模块都定义了一个同名的函数,那么它们中的一个将永远被忽略(最后加载 config.xml 文件的那个将获胜,并且我认为 3rd 方模块按字母顺序加载)。但是,如果它们都依赖于从核心控制器继承的通用函数,那很好。它们可以这样共存。
    猜你喜欢
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多