在Symfony2中創建服務容器時,您通常會將「靜態」參數(如其他類等)傳遞給其構造函數。是否可以將參數傳遞給Symony2容器構造函數
不過,我想創建一個工廠,因此我需要能夠傳遞一個動態參數的服務構造。
我發現的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以靜態參數作爲參數結束。
但是我必須做的,如果我想我廠決定根據返回的對象(例如)用戶輸入?
在Symfony2中創建服務容器時,您通常會將「靜態」參數(如其他類等)傳遞給其構造函數。是否可以將參數傳遞給Symony2容器構造函數
不過,我想創建一個工廠,因此我需要能夠傳遞一個動態參數的服務構造。
我發現的例子(例如http://symfony.com/doc/current/cookbook/service_container/factories.html)都以靜態參數作爲參數結束。
但是我必須做的,如果我想我廠決定根據返回的對象(例如)用戶輸入?
我有一些問題,理解爲什麼服務工廠不應該在你的情況下工作。你需要返回彼此無關的不同服務類嗎?
我從工廠例子中看到的是什麼,你可以做這樣的事情:
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
組件的內部組件,但我認爲如果其他方法不能解決您的問題。
問候,
馬特