2012-08-28 50 views
3

我有參數定義爲:Symfony的2 - 服務動態進口

parameters: 
    config1: 
     title: Title 1 
     data_proc: getDataOne 
     options: [things, stuff] 
    config2: 
     title: Title 2 
     data_proc: getDataTwo 
     options: [things, stuff] 
#... 

服務定義爲

my_service: 
    class: Me\MyBundle\Services\MyService 
    arguments: 
     - @security.context 
     - @doctrine.dbal.my_connection 
     - %config% # the parameter that I'd like to be dynamic 

控制器

class ProduitController extends Controller 
{ 
    public function list1Action() 
    { 
     $ssrs = $this->get('my_service'); // with config1 params 
     # ... 
    } 
    public function list2Action() 
    { 
     $ssrs = $this->get('my_service'); // with config2 params 
     # ... 
    } 
    #... 
} 

幾個控制器使用my_service
list1Action()應該叫my_service通過只config1參數

我如何能做到這一點,而無需將其定義爲多服務控制器?

+0

你有哪些服務?你嘗試注入哪個控制器?請給你的問題帶來更多的燈光 –

+0

更新了更多的細節 –

回答

1

在你Me\MyBundle\Services\MyService你可以定義公共方法,將設置新的參數(setParameters($parameters)爲例)。然後在你的控制器,你可以這樣做:

class ProduitController extends Controller 
{ 
    public function list1Action() 
    { 
     $config = $this->container->getParameter('config1'); 
     $ssrs = $this->get('my_service')->setParameters($config); 
    } 

    public function list2Action() 
    { 
     $config = $this->container->getParameter('config2'); 
     $ssrs = $this->get('my_service')->setParameters($config); 
    } 
} 

這將是一個最佳的解決方案。

當然,你可以重寫一些核心類並實現自動注入,增加數字部分,但它真的值得花費多少時間?

+0

可能不是。這就是我現在正在做的事情,但它不允許在構造函數中進行初始化:(所以我讓它們在被調用的函數中。 –

2

定義使用不同的參數兩種服務,但同一類,並得到一個或另一個

+0

我使用它10次。沒有辦法將它分解,因爲我最終不得不重複一次又一次地重新注入其他類。 –