我正在编写一个Magento扩展程序,试图覆盖第三方扩展程序IndexController.php
,但Magento无法识别它。
我遇到与this question类似的问题,我尝试过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();
}
}
根据以上链接帖子的第一个建议,我收到一个错误:
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()
或任何其他方法没有被调用。
编辑:当我访问www.site.com/stores时,在我的config.xml
文件中定义我自己的路线是有效的:
<stores>
<use>standard</use>
<args>
<module>Mycompany_Stores</module>
<frontName>stores</frontName>
</args>
</stores>
我仍然无法弄清楚为什么我的控制器没有覆盖扩展名。我已经能够覆盖同一模块中的块,而不是控制器。
答案 0 :(得分:0)
根据您的诊断步骤和评论主题中的信息,您的重写应该正常。最重要的一步是使XPath正确,
["storepickup"] => array(2) {
[0] => string(14) "Mycompany_Stores"
[1] => string(21) "Magestore_Storepickup"
}
告诉我们您已完成此操作,并且已正确列出模块的 controllers
目录以实现覆盖。
通常我会怀疑父类indexAction()
中的重定向或类似内容,但由于您直接从控制器操作var_dump()
回显,因此无法设置重定向标头。不过,我倾向于执行以下三个诊断步骤:
indexAction()
正文更改为die(__FILE__);
fooAction()
并调用网址 / storepickup / index / foo / 答案 1 :(得分:0)
如果你还没有尝试过,我会在你的app/etc/modules/MyCompany_MyModule.xml
文件中添加一个依赖标记,例如:
...
<active>true</active>
<codePool>local</codePool>
<depends>
<Magestore_Storepickup/> <!-- load after Magestore_Storepickup -->
</depends>
...