4

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

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

控制器文件:\app\code\local\Odc\Mycheckout\controllers\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 文件:\app\code\local\Odc\Mycheckout\etc\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 文件:\app\etc\module\Odc_Mycheckout.xml

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

2 回答 2

6

CamelCase 再次来袭。

Odc_Mycheckout.xml 文件:\app\etc\module\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
于 2012-10-23T15:28:35.613 回答
0

不需要以下标签。

   <global>
        <controllers>
            <Mage_Checkout>
                <rewrite>
                    <onepage>Odc_Mycheckout_Onepage</onepage>
                </rewrite>
            </Mage_Checkout>
        </controllers>
    </global>
于 2012-10-23T20:01:38.837 回答