2015-02-23 83 views
3

調用另一個控制器的動作的最佳方式是什麼?從ZF2中的控制器調用另一個控制器動作的最佳實踐

我想在不同的選項:

  1. 使用前插件
  2. 設置第二控制器作爲第一控制器的依賴

我覺得第一個選項會起作用,但我會想知道第二個是否有意義。在這種情況下,

  1. 如何獲得控制器依賴關係?

我試圖讓它使用服務管理器,但它不存在。 我已經嘗試爲控制器創建一個工廠,並從控制器管理器中獲取另一個控制器,它在實現FactoryInterface時作爲參數傳遞給createService方法。但它說沒有控制器在那裏。 與服務定位器的使用方式相比,存在與控制器不同的定位器嗎?

  1. 具有依賴性角色並被調用的控制器必須擴展或實現任何特定的類或接口嗎?

回答

3

我會說使用the forward plugin是ZF2的方式來做到這一點。你提出的另一個解決方案聽起來非常複雜,可能會讓你陷入各種與dito bug無關的麻煩。

$this->forward()->dispatch('foo', array('action' => 'process')); 

還是有,爲什麼使用這個插件forward一個合理的說法是不是你想要的?

我其實不明白爲什麼你不能從你的ControllerManager得到你的其他控制器。您確定它已註冊並且您使用正確的名稱來獲取它嗎?

+0

你是對的,我已經在另一個項目測試了它和它的作品,我可以得到控制器實例通過控制器工廠內的ServiceLocator。使用定位器可以從控制器訪問該控制器嗎? – itrascastro 2015-02-23 13:34:38

0

我已經找到了如何在控制器得到ControllerManager的:

<?php $cm = $this->serviceLocator->get('controllerManager'); 
5

要與參數轉發:

$this->forward()->dispatch('Namespace\Controller', array(
      'action' => 'ActionName', 
      'params' => array(
       'id' => $id 
      ) 
     )); 
相關問題