Magento:试图覆盖控制器

时间:2013-05-10 13:56:07

标签: magento controller method-overriding

所以我试图覆盖核心CustomerController massDelete操作。这就是我到目前为止所做的:

config.xml

<frontend>
  <routers>
    <customer_massdelete>
      <args>
        <modules>
          <MyModule_MyExtension before="Mage_Adminhtml">MyModule_MyExtension</MyModule_MyExtension>
        </modules>
      </args>
    </customer_massdelete>
  </routers>
</frontend>

我的控制器:

app/code/local/MyModule/MyExtension/controllers/CustomerController.php

<?php
require_once 'Mage/Adminhtml/controllers/CustomerController.php';
class MyModule_MyExtension_CustomerController extends Mage_Adminhtml_CustomerController {
  public function massDeleteAction() { 
   die('my controller');
  }
}

然而,当我运行批量删除时,我放入控制器中的模具会被运行。有什么想法吗?

更新

尝试解决方案如下:

<config>
  <admin>
    <routers>
      <adminhtml>          
        <args>
          <modules>
            <MyModule_MyExtension before="Mage_Adminhtml">MyModule_MyExtension</MyModule_MyExtension>
          </modules>
        </args>
      </adminhtml>
    </routers>
  </admin>
</config>

仍然没有...

更新2:

我的最终config.xml是这样的:

<config>
  <admin>
    <routers>
      <adminhtml>      
        <args>
          <modules>
            <Mymodule_Myextension before="Mage_XmlConnect_Adminhtml">Mymodule_Myextension</Mymodule_Myextension>
          </modules>
        </args>      
      </adminhtml>
    </routers>
  </admin>
</config>

但是,如果我之前=“Mage_XmlConnect_Adminhtml”,那么在尝试转到大多数索引页面时会遇到一些覆盖问题。但是,如果我优先级更低,它不会覆盖。所以我再次陷入困境。

2 个答案:

答案 0 :(得分:0)

我猜你的config.xml是假的,你可以尝试:

<admin>
   <routers>
      <adminhtml>
         <args>
           <modules>
             <MyModule_MyExtension before="Mage_Adminhtml">MyModule_MyExtension</MyModule_MyExtension>
           </modules>
         </args>
      </adminhtml>
   </routers>
</admin>

参考:http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/

答案 1 :(得分:0)

经过大量研究后,我终于找到了问题所在。我的问题是before="Mage_Adminhtml"中的config.xml。由于企业的工作方式,覆盖顶级课程是不够的。

我使用print_r(Mage::getConfig()->getNode('admin/routers/adminhtml'), true)找出覆盖它的所有模块并完成列表。 Mage_XmlConnect_Adminhtml是在企业方法之前覆盖此方法的最后一个类。

我的最终config.xml是这样的:

<config>
  <admin>
    <routers>
      <adminhtml>      
        <args>
          <modules>
            <Mymodule_Myextensionbefore="Mage_XmlConnect_Adminhtml">Mymodule_Myextension</Mymodule_Myextension>
          </modules>
        </args>      
      </adminhtml>
    </routers>
  </admin>
</config>

它现在完美无缺(编辑:不,它不......看下面的评论)