【发布时间】:2018-04-16 02:20:41
【问题描述】:
我正在为奏鸣曲管理和依赖注入而苦苦挣扎。我定义了一个 Admin 类并为它使用了一个扩展 CRUDController 的控制器。
在这个控制器中我必须做一个 HTTP 请求,所以我想注入一个 Zend HTTP 客户端实例。
news.controller:
class: MyBundle\Controller\NewsController
arguments: ['@zend.httpclient']
news.admin
class: MyBundle\Admin\NewsAdmin
...
arguments:
- null
- MyBundle\Entity\News
- MyBundle:News
新闻控制器的参数永远不会被注入..我认为这是因为管理员不关心我的自定义控制器作为服务。
所以我认为我必须用我定义为“news.controller”的控制器容器服务中的 id 替换直接类名作为管理服务的第三个参数。现在看起来像
news.admin
class: MyBundle\Admin\NewsAdmin
...
arguments:
- null
- MyBundle\Entity\News
- news.controller
现在我明白了
Call to a member function has() on null
我想,一定是缺少一些配置……怎么了?
有人知道如何将东西注入自定义 CRUDController 并与奏鸣曲管理员一起使用吗?或者我怎么能以另一种方式做到这一点?我需要 CRUDController 因为我为来自自定义模板的多个 AJAX 调用定义了一个 api ...所以还需要一个在 CRUDController 中定义的 entitymanager ...
我还读到将控制器定义为服务并不是最好的方法......但是如果我真的需要它们,那么使用 zend 客户端等外部客户端进行例如 http 调用的正确方法是什么?
【问题讨论】:
-
好的部分是 has 方法表明您的控制器被定义为服务。但是容器没有被注入。添加调用:[['setContainer', ['@service_container']]] 到你的控制器服务定义
-
嘿,Cerad,成功了!创建一个答案并将其作为解决方案投票。谢谢!
标签: php symfony dependency-injection sonata-admin