2014-02-10 183 views
0

我是symfony2的新手,我一直在試圖找到從另一個控制器中調用控制器的最佳方法。來自另一個控制器的Symfony2呼叫控制器

我有一個事件列表,我需要一個動作來獲取所有事件和另一個動作來通過ID獲取一個事件,但是我不想每次都需要重複這個教條調用。

我想過如何使用所有事件動作製作一個控制器,然後在每次需要時從其他控制器中調用所需的動作,如果有更好的方法可以做到這一點,我願意接受任何建議。

在此先感謝。

+3

http://stackoverflow.com/questions/15827384/how-to-access-a-different-controller-from-inside-a-controller-symfony2 –

回答

4

如果你有一塊應該重用的邏輯,它可能不屬於控制器。您應該嘗試將其移動到服務上,這很容易實現。

在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。不過,我建議你添加一個服務層。

+0

感謝您的快速回答,我想我會做如你所說的服務。我並不是真的被控制器嵌入方法所束縛,它只是我認爲應該完成的方式,但是你的聽起來更加方便。 –