2014-01-08 138 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

相关问题