Symfony2 FOSRest控制器as服务有一个空容器
我已将我的控制器注册为服务,以便将存储库注入控制器。这一切似乎都很好,只是现在当我试图返回视图时,它在返回数据时出错 它给出一个错误并尝试加载Symfony2 FOSRest控制器as服务有一个空容器,symfony,dependency-injection,Symfony,Dependency Injection,我已将我的控制器注册为服务,以便将存储库注入控制器。这一切似乎都很好,只是现在当我试图返回视图时,它在返回数据时出错 它给出一个错误并尝试加载fos\u rest.view\u handler: Error: Call to a member function get() on a non-object 正在symfony2控制器类中的$this->container->get($id)上调用get。由于某种原因,当我将控制器用作服务时,ContainerInterface不再被注入conta
fos\u rest.view\u handler
:
Error: Call to a member function get() on a non-object
正在symfony2控制器类中的$this->container->get($id)
上调用get。由于某种原因,当我将控制器用作服务时,ContainerInterface
不再被注入containerware
中
以前有人遇到过这个问题吗?如何确保注入相同的容器
以下是我将类声明为服务的方式:
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="acme.users.apibundle.controller.user_controller" class="Acme\Users\ApiBundle\Controller\UserController">
<argument type="service" id="acme.users.user_repository"/>
</service>
</services>
</container>
您需要使用
调用
将容器注入控制器,以便在handleView
方法中可以使用该容器
将配置更改为
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="acme.users.apibundle.controller.user_controller" class="Acme\Users\ApiBundle\Controller\UserController">
<argument type="service" id="acme.users.user_repository"/>
<!-- inject the container via the setContainer method -->
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
</services>
我担心这一点,当ContainerWare在任何地方加载时,我们是否无法自动执行此操作?ContainerWare不会更改服务-您必须调用setContainer。您还可以手动注入ViewHandler,构建视图,从而驱动整个控制器服务,而不是扩展FOSRestController。示例:LiipHelloBundle有一些示例,您可以侦听
内核.controller
事件,检查控制器是否具有ContainerWareInterface
并将容器注入其中。或者,您可以将视图处理程序插入到\u构造中
,并使用该服务而不是容器调用覆盖handleView
方法。您可以覆盖内核请求分派器使用的控制器解析程序。但这并不值得。
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="acme.users.apibundle.controller.user_controller" class="Acme\Users\ApiBundle\Controller\UserController">
<argument type="service" id="acme.users.user_repository"/>
<!-- inject the container via the setContainer method -->
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
</services>