OnepageController没有使用我的自定义控制器重载/重写

时间:2012-10-23 14:39:02

标签: magento magento-1.5

我正在尝试使用我的自定义控制器在本地池中重载/重写核心Onepagecontroller,但它无法正常工作。 我正在使用Magento 1.5.1

这是我的文件结构和代码:

控制器文件: \应用\代码\本地\ ODC \ Mycheckout \控制器\ OnepageController.php

    require_once 'Mage/Checkout/controllers/OnepageController.php';

    class Odc_Mycheckout_OnepageController extends Mage_Checkout_OnepageController
    {   
        public function indexAction()
        {
            echo "This controller has been overridden.";
        }
    }

config.xml文件: \应用\代码\本地\ ODC \ Mycheckout \等\ config.xml中

    <?xml version="1.0"?>
    <config>
        <modules>
            <Odc_Mycheckout>
                <version>0.0.1</version>
            </Odc_Mycheckout>
        </modules>
        <global>
            <controllers>
                <Mage_Checkout>
                    <rewrite>
                        <onepage>Odc_Mycheckout_Onepage</onepage>
                    </rewrite>
                </Mage_Checkout>
            </controllers>
        </global>
        <frontend>
            <routers>
                <mycheckout>
                   <args>
                        <modules>
                            <Odc_Mycheckout before="Mage_Checkout">Odc_Mycheckout</Odc_Mycheckout>
                        </modules>
                   </args>
                </mycheckout>
            </routers>
        </frontend>
    </config>

Odc_Mycheckout.xml文件: \应用\等\模块\ Odc_Mycheckout.xml

    <?xml version="1.0"?>
    <config>
      <modules>
        <Odc_Mycheckout>
          <active>true</active>
          <codepool>local</codepool>
        </Odc_Mycheckout>
      </modules>
    </config>

2 个答案:

答案 0 :(得分:6)

CamelCase再次罢工。

Odc_Mycheckout.xml文件: \应用\等\模块\ Odc_Mycheckout.xml

    <?xml version="1.0"?>
    <config>
      <modules>
        <Odc_Mycheckout>
          <active>true</active>
          <codePool>local</codePool> <!-- Capital P in pool -->

另外,在模块配置文件中:

    <frontend>
        <routers>
            <checkout> <!-- must match the router config you are trying to override -->
               <args>
                    <modules>
                        <Odc_Mycheckout before="Mage_Checkout">Odc_Mycheckout</Odc_Mycheckout>
                    </modules>
               </args>
            </checkout>
        </routers>
    </frontend>

修改

要在重写的控制器不工作时进行故障排除,可以帮助您回归基础知识。一种方法是使用与Mage_Core_Controller_Varien_Router_Standard相同的方法。在脚本 test.php

<?php

ini_set('display_errors',1);
include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();

$module     = 'Odc_Mycheckout';
$controller = 'Onepage';

$router     = new Mage_Core_Controller_Varien_Router_Standard;
$filename   = $router->getControllerFileName($module,$controller);
$classname  = $router->getControllerClassName($module,$controller);

include $filename;

$controller = Mage::getControllerInstance(
    $classname,
    Mage::app()->getRequest(),
    Mage::app()->getResponse()
);

var_dump($controller); //should be a  class

答案 1 :(得分:0)

不需要以下标签。

   <global>
        <controllers>
            <Mage_Checkout>
                <rewrite>
                    <onepage>Odc_Mycheckout_Onepage</onepage>
                </rewrite>
            </Mage_Checkout>
        </controllers>
    </global>