我正在尝试使用我的自定义控制器在本地池中重载/重写核心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>
答案 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>