我是symfony2的新手,我一直在試圖找到從另一個控制器中調用控制器的最佳方法。來自另一個控制器的Symfony2呼叫控制器
我有一個事件列表,我需要一個動作來獲取所有事件和另一個動作來通過ID獲取一個事件,但是我不想每次都需要重複這個教條調用。
我想過如何使用所有事件動作製作一個控制器,然後在每次需要時從其他控制器中調用所需的動作,如果有更好的方法可以做到這一點,我願意接受任何建議。
在此先感謝。
我是symfony2的新手,我一直在試圖找到從另一個控制器中調用控制器的最佳方法。來自另一個控制器的Symfony2呼叫控制器
我有一個事件列表,我需要一個動作來獲取所有事件和另一個動作來通過ID獲取一個事件,但是我不想每次都需要重複這個教條調用。
我想過如何使用所有事件動作製作一個控制器,然後在每次需要時從其他控制器中調用所需的動作,如果有更好的方法可以做到這一點,我願意接受任何建議。
在此先感謝。
如果你有一塊應該重用的邏輯,它可能不屬於控制器。您應該嘗試將其移動到服務上,這很容易實現。
在SRC/BUNDLENAME /資源/配置/ services.yml:
services:
service_name:
class: BundleName\Service\ServiceName
arguments: [@doctrine.orm.default_entity_manager]
然後,創建BUNDLENAME \服務\服務名稱類(as shown in the docs)與待重新使用的邏輯。下面的例子:
class ServiceName {
protected $entityManager;
public function __construct($entityManager) {
$this->entityManager = $entityManager;
}
public function addProduct($product) {
//Get the array, hydrate the entity and save it, at last.
//...
$entity = new Product();
//...
$this->entityManager->persist($entity);
$this->entityManager->flush($entity);
return $entity;
}
}
然後,在你的行動,只需撥打$this->get('service_name')->addProduct($array)
,或類似的東西。
當然,如果你想要一個控制器動作被重用,you can use your controller as a service。不過,我建議你添加一個服務層。
感謝您的快速回答,我想我會做如你所說的服務。我並不是真的被控制器嵌入方法所束縛,它只是我認爲應該完成的方式,但是你的聽起來更加方便。 –
http://stackoverflow.com/questions/15827384/how-to-access-a-different-controller-from-inside-a-controller-symfony2 –