2012-04-23 86 views
2

在Symfony2中創建服務容器時,您通常會將「靜態」參數(如其他類等)傳遞給其構造函數。是否可以將參數傳遞給Symony2容器構造函數

不過,我想創建一個工廠,因此我需要能夠傳遞一個動態參數的服務構造。

我發現的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以靜態參數作爲參數結束。

但是我必須做的,如果我想我廠決定根據返回的對象(例如)用戶輸入?

回答

3

我有一些問題,理解爲什麼服務工廠不應該在你的情況下工作。你需要返回彼此無關的不同服務類嗎?

我從工廠例子中看到的是什麼,你可以做這樣的事情:

class NewsletterFactory 
{ 
    public function __constructor(...) 
    { 
     // Receive arguments needed to create the service below 
    } 

    public function get() 
    { 
     // Say the variable $userInput exists and is derived from constructor 
     if ($userInput === 'string') 
      return new NewsletterManager($dynamicArgument1); 

     if ($userInput === 'integer') 
      return new AnotherNewsletterManager($dynamicArgument2); 

     return new DefaultNewsletterManager(); 
    } 
} 

現在,如果這個不適合你的需求。你也可以創建一個服務,如CustomFactory,返回你所需要的。返回的內容不是直接的服務,所以你可以做任何你想做的事情。但是這會阻止您從依賴容器請求由CustomFactory創建的對象。

上類似於是FormFactory。它是用於實例化表單類型的工廠。但FormFactory更強大,因爲它與一個依賴注入標記和一個編譯器通道相結合,它將每種類型註冊到依賴注入系統中,以便它們可以被自己檢索。我並不是所有Form組件的內部組件,但我認爲如果其他方法不能解決您的問題。

問候,
馬特

相關問題