Magento:控制器覆盖不工作

Magento:控制器覆盖不工作,magento,controller,overriding,Magento,Controller,Overriding,试图覆盖Cms/controllers/IndexController 这是我的模块的目录结构- 本地/MyCompany/FourOhFourExp/controllers/IndexController.php Local/MyCompany/FourOhFourExp/etc/config.xml 我的IndexController的代码是 <?php require_once 'Mage'. DS .'Cms'. DS .'controllers'. DS .'IndexCo

试图覆盖Cms/controllers/IndexController

这是我的模块的目录结构-

  • 本地/MyCompany/FourOhFourExp/controllers/IndexController.php
  • Local/MyCompany/FourOhFourExp/etc/config.xml
我的IndexController的代码是

<?php

require_once 'Mage'. DS .'Cms'. DS .'controllers'. DS .'IndexController.php';

class MyCompany_FourOhFourExp_IndexController extends Mage_Cms_IndexController
{
    public function noRouteAction($coreRoute = null){
        Mage::log('First Function');
        header("Location: new_route.html");
        die();
    }

    public function defaultNoRouteAction()
    {
        Mage::log('Second function!');
        header("Location: new_route.html");
        die();
    }
}
?>

这是我的config.xml文件的代码

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <MyCompany_FourOhFourExp>
            <version>0.1.0</version>
        </MyCompany_FourOhFourExp>
    </modules>
    <frontend>
        <routers>
            <cms>
                <args>
                    <modules>
                        <MyCompany_FourOhFourExp before="Mage_Cms">MyCompany_FourOhFourExp</MyCompany_FourOhFourExp>
                    </modules>
                </args>
            </cms>
        </routers>
        <events>
            <controller_action_noroute>
                <observers>
                    <cms>
                        <class>cms/observer</class>
                        <method>noRoute</method>
                    </cms>
                </observers>
            </controller_action_noroute>
    </frontend>
</config>

0.1.0
我公司
cms/观察员
诺鲁特

希望有人能解释为什么这不是最重要的。我已经看过很多教程和博客文章,但还没有弄清楚为什么它不起作用

有很多问题:

1) 模块路径:

由于您的控制器类是MyCompany\u FouroFourExp\u IndexController,那么类的路径应该是

app/code/local/MyCompany/FourOhFourExp
  • 本地/我的公司/控制器/索引控制器

  • Local/MyCompany/etc/config.xml

  • 改为

  • 本地/MyCompany/FourOhFourExp/controllers/IndexController/php
  • Local/MyCompany/FourOhFourExp/etc/config.xml
  • 2) 法师cms控制器添加不正确

    require_on Mage::getModuleDir('controllers', 'Mage_Cms'). DS .'IndexController.php'; 
    
    需要做什么:

    • 添加到app/code/local/Mage/Cms/controllers/IndexController.php,
      Mage::dispatchEvent('Cms\u controller\u action\u noroute',array('action'=>this')

    • 在自定义模块中,捕获事件


    我认为没有必要扩展
    Mage\u Cms\u IndexController
    ,您可以扩展
    Mage\u Core\u Controller\u Front\u Action
    。这将保存一次调用
    require\u
    ,这在站点启用编译时是不正确的。我正在尝试覆盖原始的,因此它甚至不应该编译其他控制器,并且我没有覆盖所有的函数,只有1-2个,所以我使用require来拉入该文档。这是我第一次尝试这种覆盖,在一些看似直截了当的事情上苦苦挣扎是令人沮丧的,但是,我想在开发过程中没有什么是这样的。我对此表示歉意,但您建议的模块路径就是我正在使用的路径。我在我的问题文件夹中进行了调整,文件夹的首字母小写,并且被错误地调用。将代码复制到单独的文件并按预期工作