在magento中覆盖模块,没有结果

时间:2013-06-25 12:01:33

标签: magento

这是两个文件:

  1. 应用程序/代码/核心/法师/模块/控制器/ SubscriberController.php
  2. 应用程序/代码/本地/马根斯/模块/控制器/ SubscriberController.php
  3. 我试图覆盖文件号(1),但没有结果,有下一个代码:

    应用/代码/本地/马根斯/新闻的/ etc / config.xml中

        <?xml version="1.0"?>
    <config>
        <modules>
            <MageNS_Newsletter>
                <version>0.0.1</version>
            </MageNS_Newsletter>
        </modules>
        <global>
            <controllers>
                <Mage_Newsletter>
                    <rewrite>
                        <account>MageNS_Newsletter_Controllers_SubscriberController</account>
                    </rewrite>
                </Mage_Newsletter>
            </controllers>
        </global>
    </config> 
    

    app / code / local / MageNS / Module / controllers / SubscriberController.php

        require_once("Mage/Newsletter/controllers/SubscriberController.php");
    class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController
    {  
        public function test{
            echo "HYLlkpkdpwqkdpqkdqpkdqpkdpqkd";die;
        }
    }
    

1 个答案:

答案 0 :(得分:1)

动作控制器的实例化和解析与Magento中的其他主类类型(块,帮助器和模型)不同:

  1. 通过配置XML重写可以通过不同的机制和惯例来实现
  2. 通过有意设计PSR-0 - 就像自动加载不适用于Magento中的控制器类。
  3. 必须在覆盖模块的frontName下添加单独模块的 controllers 目录:

    <frontend><!-- match to original module config -->
        <routers>
            <newsletter><!-- match to original module config-->
                <args>
                    <modules>
                        <MageNS before="Mage_Newsletter">MageNS_Module</MageNS>
                        <!--
                            The above points to app/code/[codePool]/MageNS/Module/controllers/
                            If the value were MageNS_Module_Rewrites then controller matching
                            would begin in app/code/[codePool]/MageNS/Module/controllers/Rewrites/
                        -->
                    </modules>
                </args>
            </newsletter>
        </routers>
    </frontend>
    

    如果查看Mage_Core_Controller_Varien_Router_Standard::collectRoutes(),您将看到[正在评估此节点的位置,以将指示的目录添加到原始模块的控制器目录之前的匹配目录列表中。

    附加说明:它并不重要,但最理想的包括父类定义的语法如下:

    include Mage::getModuleDir('controllers','Mage_Newsletter').DS.'SubscriberController.php';
    class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController
    {  
        //Only methods ending in 'Action' can be invoked directly via HTTP request
        // -------------------v
        public function testAction
        {
            $this->getResponse()->setBody("HYLlkpkdpwqkdpqkdqpkdqpkdpqkd");
        }
    }