我一直在試圖在我爲Magento構建的模塊中重載Mage_Customer_AccountController
類,但由於某種原因,它不工作,即使類正在實例化,我的方法也沒有被調用。Magento - 過載控制器類
在我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
方法沒有按不運行,而是從Mage_Customer_AccountController
運行loginAction
方法。
什麼我實際上要完成的是從將用戶重定向回/customer/account/login
停止AccountController
他們登出由於該模塊關係到一個外部API /服務,處理用戶之後。我嘗試使用在controller_action_predispatch_customer_account_logout
上觸發的觀察者在將用戶重定向到登錄前的任何頁面之前執行一些註銷管理,但在重定向到外部服務之前將AccountController
步驟重新導向,並將其自己的重定向發送到/customer/account/login
。
如果任何人有更好的方法來做這件事我建議大家都耳熟能詳。
編輯:看來我的問題在別處,因爲我認爲被調用的原始動作方法根本沒有被調用。相反,在Magento某處發佈重定向到/customer/account/login
上述觀察者方法運行後(觀察者嘗試設置重定向,但這會被忽略(並且是的,我已檢查,我用於重定向的URL是最絕對不是/customer/account/login
))。
爲了這個例子的目的,它是'Mymodule',但顯然我在發佈前做了搜索和替換。 – mludd
如果在本地代碼池中覆蓋它,你應該有'controllers/Customer/AccountController.php'。當你調用這個動作'custom/account/login'時,只有你的'public function loginAction()'將被調用 – Slimshadddyyy
@Slimshadddyyy:你是什麼意思?我在我的'config.xml'中指定Magento應該在'controllers/Override /'中尋找我的類。 – mludd