Magento中的控制器覆盖

时间:2012-11-05 08:15:08

标签: php magento override magento-1.7 mage

你好朋友,我需要骑过magento核心控制器

我想覆盖Mage\ImportExport\controllers\Adminhtml\ExportController.php

在我的community\compnyname\modulename\controllers\Adminhtml

这是我的config.xml in \compnyname\modulename\etc

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <company_module>
            <version>1.0</version>
        </company_module>
    </modules>
    <global>
        <rewrite>
            <company_module>
                <from><![CDATA[#^/controller/adminhtml/#]]></from>
                <to>/controller/adminhtml/</to>
            </company_module>
        </rewrite>
    </global>
</config>

这是\compnyname\modulename\controllers\Adminhtml\ExportController.php

中的控制器代码
<?php
require_once('/Mage/ImportExport/controllers/Adminhtml/ExportController.php');
class company_module_ImportExport_Controller_Adminhtml_ExportController extends Mage_ImportExport_Adminhtml_ExportController
{
    function indexAction()
    {
        echo "i am called";die;
    }
}
?>

请帮我改写控制器

我的代码中的问题在哪里?

3 个答案:

答案 0 :(得分:9)

自Magento 1.3(2009)以来,这种重写已被弃用。您可以阅读更多相关信息here

您想要做的事情如下:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <companyname_exportproduct before="Mage_ImportExport_Adminhtml">Companyname_ExportProduct_Adminhtml</companyname_exportproduct>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

你的类名和要求看起来也有些偏差。并且不使用php结束标记结束php类文件是一个好习惯,因为它可能会意外地包含一个空格,这会破坏发送的标题顺序。

所以说我将你的班级文件更改为:

<?php
require_once('Mage/ImportExport/controllers/Adminhtml/ExportController.php');
class Companyname_ExportProduct_Adminhtml_ExportController extends Mage_ImportExport_Adminhtml_ExportController
{
    function indexAction()
    {
        echo "i am called";die;
    }
}

万一你忘记了我在app / etc / modules中必须包含的文件,以使你的模块处于活动状态:

<config>
    <modules>
        <Companyname_ExportProduct>
            <active>true</active>
            <codePool>community</codePool>
        </Companyname_ExportProduct>
    </modules>
</config>

答案 1 :(得分:2)

检查以下链接。
Link 1
Link 2

我希望这可以帮到你。

答案 2 :(得分:2)

这是关于控制器的包含路径的一点通知。

如果 Magento编译器模式已开启,则包括路径可能导致错误

require_once 'Mage/ImportExport/controllers/Adminhtml/ExportController.php';

而不是使用

require_once Mage::getModuleDir('controllers', 'Mage_ImportExport').DS.'Adminhtml_ExportController.php';

它会更安全。 希望这会有所帮助..