重写Magento的第三方控制器在自定义模块(Overriding Magento Third Pa

2019-10-19 16:55发布

我写试图重写一个第三方扩展Magento的扩展IndexController.php但Magento的不承认它。

我有一个类似的问题,因为这个问题 ,我已经试过benmarks建议,但Magento的似乎仍然无视我的覆盖。

config.xml文件看起来像这样:

<?xml version="1.0"?>
<config>
    <modules>
    <Mycompany_Stores>
      <version>0.1.0</version>
    </Mycompany_Stores>
  </modules>
    <frontend>
        <routers>
            <storepickup>
                <args>
                    <modules>
                        <Mycompany_Stores before="Magestore_Storepickup">Mycompany_Stores</Mycompany_Stores>
                    </modules>
                </args>
            </storepickup>
        </routers>
    </frontend>
</config>

而我IndexController.php看起来是这样的:

<?php

require_once('Magestore/Storepickup/controllers/IndexController.php');
class Mycompany_Stores_IndexController extends Magestore_Storepickup_IndexController {

    public function indexAction() {
      var_dump('asdfasdfsdf');  
      parent::indexAction();
  }
}

继benmarks从上面的链接后的第一个建议,我得到一个错误: Fatal error: Uncaught exception 'Exception' with message 'Warning: include(Mycompany/Stores/IndexController.php) [<a href='function.include'>function.include</a>]: failed to open stream:...

但是,随着第二个建议,我得到:

["storepickup"] => array(2) {
    [0] => string(14) "Mycompany_Stores"
    [1] => string(21) "Magestore_Storepickup"
}

因此,它似乎有一种超越,但我不明白,为什么我indexAction()或任何其他方法不获取调用。

编辑:定义我在我自己的路线config.xml文件的工作,当我去www.site.com/stores:

<stores> 
    <use>standard</use>
    <args>
        <module>Mycompany_Stores</module>
        <frontName>stores</frontName>
    </args>
</stores>

我仍然无法弄清楚,为什么我的控制器不覆盖,虽然扩展。 我已经能够这样同一个模块内覆盖屏蔽,只是没有控制器。

Answer 1:

根据您的诊断步骤和注释的信息线程你重写应该是工作。 最重要的一步是获得正确的XPath和

["storepickup"] => array(2) {
    [0] => string(14) "Mycompany_Stores"
    [1] => string(21) "Magestore_Storepickup"
}

告诉我们,你已经做到了这一点,那你的模块的controllers目录正确列出来实现覆盖。

通常我会怀疑一个重定向或在父类类似indexAction()但由于您呼应直接从您的控制器动作var_dump()重定向报头将不能进行设置。 不过,我会倾向于执行以下三个诊断步骤:

  1. 更改您indexAction()的身体die(__FILE__);
  2. 您也可以定义自己的路线和frontname和访问你的控制器测试标准控制器的功能,这样在/ frontname /
  3. 创建方法fooAction()与上述相同,并调用URL / storepickup /索引/富/


Answer 2:

如果你还没有尝试过,我会把在依赖代码到你的app/etc/modules/MyCompany_MyModule.xml文件,是这样的:

 ... 
        <active>true</active>
        <codePool>local</codePool>
        <depends>
            <Magestore_Storepickup/>  <!-- load after Magestore_Storepickup -->
        </depends>
 ...


文章来源: Overriding Magento Third Party Controller In Custom Module
标签: php magento