0
我创建了一个新服务,其工作涉及调用其他服务上的函数,这些服务必须在运行时通过名称加载。所以,我无法将一组静态服务传递给我的服务,我希望它实际上能够在服务容器本身上调用get()
。 Symfony文档没有帮助描述如何在Controller类之外完成此操作,我可以调用$ this-> get()。任何人都知道吗?如何在我的服务中访问symfony服务容器?
我创建了一个新服务,其工作涉及调用其他服务上的函数,这些服务必须在运行时通过名称加载。所以,我无法将一组静态服务传递给我的服务,我希望它实际上能够在服务容器本身上调用get()
。 Symfony文档没有帮助描述如何在Controller类之外完成此操作,我可以调用$ this-> get()。任何人都知道吗?如何在我的服务中访问symfony服务容器?
你有两种可能的解决方案:
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();
...
}
}
非常好,谢谢! – zjm555
您不应该在服务中注入'service_container'。在你的例子中,你应该只注入你需要的服务。请参阅http://symfony.com/doc/current/components/dependency_injection.html中的“避免您的代码取决于容器”部分。 – Tsounabe