【问题标题】:Magento: Controller override not workingMagento:控制器覆盖不起作用
【发布时间】:2014-09-16 15:43:44
【问题描述】:

试图覆盖 Cms/controllers/IndexController。

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

  • 本地/MyCompany/FourOhFourExp/controllers/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>

希望有人能解释为什么这不是压倒一切的。我浏览了许多教程和博客文章,但还没有弄清楚为什么它不起作用。

【问题讨论】:

  • 我认为不需要扩展Mage_Cms_IndexController,你可以扩展Mage_Core_Controller_Front_Action。这样可以节省调用 require_once 的时间,这在站点启用编译时是不正确的。
  • 我正在尝试覆盖原来的,所以它甚至不应该编译另一个控制器,而且我没有覆盖所有的功能,只是 1-2 所以我正在使用 require 来拉记录。这是我第一次尝试这种覆盖,在看似直截了当的事情上如此努力地挣扎是令人沮丧的,但话又说回来,我想在开发中什么都不是。

标签: magento controller overriding


【解决方案1】:

有很多问题:

1)模块路径:

由于你的控制器类是MyCompany_FourOhFourExp_IndexController,那么类的路径应该是

app/code/local/MyCompany/FourOhFourExp
  1. 本地/MyCompany/controllers/IndexController

  2. 本地/MyCompany/etc/config.xml

改成

  1. 本地/MyCompany/FourOhFourExp/controllers/IndexController/php
  2. 本地/MyCompany/FourOhFourExp/etc/config.xml

2)法师cms控制器添加不正确

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

【讨论】:

  • 我很抱歉,但你建议的模块路径是我正在使用的。我对我的问题进行了调整
  • 文件夹的首字母小写,调用不正确。将代码复制到单独的文件并按预期工作
【解决方案2】:

需要做什么:

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

  • 在您的自定义模块中,捕捉事件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多