我一直试图在为Magento建造的模块中超载Mage_Customer_AccountController
课程,但由于某种原因它不起作用,我的方法并不存在即使正在实例化类,也会调用它。
在etc/config.xml
我得到了:
[...]
<frontend>
<routers>
<customer>
<args>
<modules>
<mycompany_mymodule before="Mage_Customer">Mycompany_Mymodule_Override</mycompany_mymodule>
</modules>
</args>
</customer>
</routers>
</frontend>
[...]
在controllers/Override/AccountController.php
我有:
<?php
require_once('Mage/Customer/controllers/AccountController.php');
class Mycompany_Mymodule_Override_AccountController extends Mage_Customer_AccountController {
/**
* This runs if uncommented
*/
//public function __construct() {
// Mage::log("THIS GETS LOGGED");
//}
/**
* This should be replacing the default loginAction but doesn't run.
*/
public function loginAction() {
Mage::log('THIS DOES NOT GET LOGGED');
}
}
?>
我觉得特别的是上面的构造函数如果没有注释,但loginAction
方法没有运行,而是运行loginAction
方法,则显然会运行。
我实际尝试完成的任务是阻止Mage_Customer_AccountController
用户在注销后将用户重定向回AccountController
,因为此模块与外部绑定处理用户的API /服务。我尝试使用在/customer/account/login
上触发的观察者进行一些注销内务处理,然后将用户重定向回到他们在注销之前所处的任何页面,但在重定向到外部服务之前执行了controller_action_predispatch_customer_account_logout
步骤将自己的重定向发布到AccountController
。
如果有人对更好的方法提出建议我全心全意。
编辑:看来我的问题出在其他地方,因为我假设的原始操作方法被称为根本没有被调用。相反,在上面提到的观察者方法运行之后,Magento中的某个地方正在向/customer/account/login
发出重定向(观察者试图设置重定向,但这会被忽略(是的,我已经检查过,URL I&#39} ; m用于重定向绝对不是/customer/account/login
))。
答案 0 :(得分:1)
您可以尝试捕捉活动:
customer_logout
此事件在类logout
中的方法Mage_Customer_Model_Session
中触发,它在调用受保护的方法customer
之前提供_logout
对象,删除会话cookie。
答案 1 :(得分:0)
您的config.xml文件
...
<frontend>
<routers>
<customer>
<args>
<modules>
<company_modulename before="Mage_Customer">Company_Modulename</company_modulename>
</modules>
</args>
</customer>
</routers>
</frontend>
...
创建一个控制器类: 应用程序/代码/ [codePool] /Company/Modulename/controllers/AccountController.php 使用以下代码:
require_once 'Mage/Customer/controllers/AccountController.php';
class Company_Modulename_AccountController extends Mage_Customer_AccountController
{
public function indexAction()
{
die('overriden');
parent::indexAction();
}
}