Magento:控制器覆盖不起作用

时间:2014-09-16 15:43:45

标签: magento controller override

尝试覆盖Cms / controllers / IndexController。

这是我模块的目录结构 -

  • 本地/ MyCompany的/ FourOhFourExp /控制器/ IndexController.php
  • 本地/ 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>

希望有人能解释为什么这不是最重要的。我查看了大量的教程和博客文章,但尚未弄清楚它为什么不起作用。

2 个答案:

答案 0 :(得分:2)

有很多问题:

1)ModulePath进行:

由于您的控制器类为MyCompany_FourOhFourExp_IndexController,因此类的路径应为

app/code/local/MyCompany/FourOhFourExp
  1. 本地/ MyCompany的/控制器/索引控制器

  2. 本地/ MyCompany的在/ etc / config.xml中

  3. 更改为

    1. 本地/ MyCompany的/ FourOhFourExp /控制器/索引控制器/ PHP的
    2. 本地/ MyCompany的/ FourOhFourExp的/ etc / config.xml中
    3. 2)法师cms控制器不能正确添加

      require_on Mage::getModuleDir('controllers', 'Mage_Cms'). DS .'IndexController.php'; 
      

答案 1 :(得分:0)

需要做什么:

  • 添加到app / code / local / Mage / Cms / controllers / IndexController.php,Mage::dispatchEvent('cms_controller_action_noroute', array('action'=>$this));

  • 在自定义模块中
  • ,抓住事件