Sonata 管理控制器 + 依赖注入
Sonata admin controller + dependency injection
我正在为 sonata admin 和依赖注入而苦苦挣扎。我定义了一个 Admin class 并使用自己的控制器扩展 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 替换直接 class 名称作为管理服务的第三个参数。现在看起来像
news.admin
class: MyBundle\Admin\NewsAdmin
...
arguments:
- null
- MyBundle\Entity\News
- news.controller
现在我明白了
Call to a member function has() on null
我想,一定是少了什么配置……怎么了?
有人知道如何将东西注入自定义 CRUDController 并将其与 sonata admin 一起使用吗?或者我怎样才能以另一种方式做到这一点?我需要 CRUDController 因为我为来自自定义模板的几个 AJAX 调用定义了一个 api ... 所以还需要有一个在 CRUDController 中定义的实体管理器 ...
我还读到,将控制器定义为服务并不是最好的方法......但是如果我真的需要它们,那么与外部客户端(例如 zend 客户端)进行 http 调用的正确方法是什么?
has() 错误表示虽然您的控制器现在已正确连接为服务,但尚未注入容器。这种注入通常由控制器解析器在创建新控制器后完成 class。但是从容器中拉取controller时不执行此步骤。
解决方案是通过您的服务定义注入容器:
news.controller:
class: MyBundle\Controller\NewsController
arguments: ['@zend.httpclient']
calls:[['setContainer', ['@service_container']]]
很多括号,但是很好。
我正在为 sonata admin 和依赖注入而苦苦挣扎。我定义了一个 Admin class 并使用自己的控制器扩展 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 替换直接 class 名称作为管理服务的第三个参数。现在看起来像
news.admin
class: MyBundle\Admin\NewsAdmin
...
arguments:
- null
- MyBundle\Entity\News
- news.controller
现在我明白了
Call to a member function has() on null
我想,一定是少了什么配置……怎么了?
有人知道如何将东西注入自定义 CRUDController 并将其与 sonata admin 一起使用吗?或者我怎样才能以另一种方式做到这一点?我需要 CRUDController 因为我为来自自定义模板的几个 AJAX 调用定义了一个 api ... 所以还需要有一个在 CRUDController 中定义的实体管理器 ...
我还读到,将控制器定义为服务并不是最好的方法......但是如果我真的需要它们,那么与外部客户端(例如 zend 客户端)进行 http 调用的正确方法是什么?
has() 错误表示虽然您的控制器现在已正确连接为服务,但尚未注入容器。这种注入通常由控制器解析器在创建新控制器后完成 class。但是从容器中拉取controller时不执行此步骤。
解决方案是通过您的服务定义注入容器:
news.controller:
class: MyBundle\Controller\NewsController
arguments: ['@zend.httpclient']
calls:[['setContainer', ['@service_container']]]
很多括号,但是很好。