2

你好朋友我需要超越 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;
    }
}
?>

请帮助我覆盖控制器

我的代码哪里有问题?

4

3 回答 3

9

自 Magento 1.3 (2009) 以来,不推荐使用这样的重写。你可以在这里阅读更多关于它的信息。

您想要做的是如下所示:

<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>
于 2012-11-05T10:11:24.587 回答
2

检查以下链接。链接 1链接 2希望对您有所帮助。


于 2012-11-05T08:57:03.693 回答
2

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

如果打开Magento 编译器模式,此包含路径可能会导致错误

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

取而代之的是,它很好用

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

会更安全。希望这可以帮助..

于 2014-01-23T10:06:58.153 回答