2014-01-17 24 views
1

您可以創建多個控制器來覆蓋相同的Magento核心控制器嗎?例如,我可以在每個模塊中創建兩個模塊,創建一個AccountController.php來覆蓋Mage/Customer中的Magento核心AccountController? 如果兩個模塊取決於保存核心模塊並覆蓋相同的控制器,它是否會造成任何衝突,當然,每個控制器都將覆蓋核心控制器中的不同操作。您是否可以創建多個控制器來覆蓋相同的Magento核心控制器?

回答

1

是的,您可以創建多個擴展相同核心控制器的模塊。

首先,您需要包含核心控制器,然後僅重載所需的特定功能。

require_once 'Mage/Customer/controllers/AccountController.php'; 
class Namespace_Module1_AccountController extends Mage_Customer_AccountController 
{ 
    public function indexAction(){ 

     //this will overload the index action for the core customer AccountController 

    } 
} 

對您製作的每個模塊重複此操作,並僅重載您希望更改的操作。例如,如果你想讓第二個模塊重載保存操作,你會這樣做。

require_once 'Mage/Customer/controllers/AccountController.php'; 
class Namespace_Module2_AccountController extends Mage_Customer_AccountController 
{ 
    public function saveAction(){ 

     //this will overload the save action for the core customer AccountController 
     //this will also leave your index action overload from the other module in place 

    } 
} 
+0

但是,如果兩個模塊使用相同的功能,那麼它將如何工作?兩個或一個將工作?或者會發生任何疑惑/錯誤? –

+0

我還沒有測試過這個,但我相信如果兩個模塊都定義了一個相同名稱的函數,那麼其中一個將會被忽略(config.xml文件最後加載的那個會贏,我_think_第三方模塊按字母順序加載)。但是,如果它們都依賴於從核心控制器繼承的通用功能,那很好。它們可以像那樣共存。 –