2014-01-08 275 views
0

我創建了一個新服務,其工作涉及調用其他服務上的函數,這些服務必須在運行時通過名稱加載。所以,我無法將一組靜態服務傳遞給我的服務,我希望它實際上能夠在服務容器本身上調用get()。 Symfony文檔沒有幫助描述如何在Controller類之外完成此操作,我可以調用$ this-> get()。任何人都知道嗎?如何在我的服務中訪問symfony服務容器?

回答

2

你有兩種可能的解決方案:

1.注入的服務容器:

<argument type="service" id="service_container" /> 

然後在你的類:

use Symfony\Component\DependencyInjection\Container; 

//... 

public function __construct(Container $container, ...) { 

2.擴展ContainerAware類

use Symfony\Component\DependencyInjection\ContainerAware; 

class YourService extends ContainerAware 
{ 
    public function someMethod($serviceName) 
    { 
     $this->container->get($serviceName)->doSomething(); 
     ... 
    } 
} 
+0

非常好,謝謝! – zjm555

+0

您不應該在服務中注入'service_container'。在你的例子中,你應該只注入你需要的服務。請參閱http://symfony.com/doc/current/components/dependency_injection.html中的「避免您的代碼取決於容器」部分。 – Tsounabe

相關問題