在事件订阅者中访问服务
Accessing a service inside an event subscriber
我有一个有 Doctrine 事件的事件订阅者。在其中,我正在尝试调用我已注册的服务。我已经在控制器中调用它并且它在那里工作,但是当我尝试在我的事件订阅者中调用它时我收到错误消息:
Attempted to call method "get" on class "Path\To\My\Class".
Did you mean to call "getSubscribedEvents"?
代码如下所示:
$embedcode_service = $this->get('myproject.mynamespace.myfield.update');
$embedcode_service->refreshMyField($document);
为什么我不能在这个事件订阅者中访问我的服务?我怎样才能访问它?
Cerad 已经回答了我只是要详细说明:
在您的订阅者中注入您的服务:
services:
...
my.subscriber:
class: Acme\SearchBundle\EventListener\SearchIndexerSubscriber
# Service you want to inject
arguments: [ @service_i_want_to_inject.custom ]
tags:
- { name: doctrine.event_subscriber, connection: default }
...
在您的订阅者的 php 代码中,将注入的服务分配给一个 class 变量以便稍后能够访问它:
...
class SearchIndexerSubscriber implements EventSubscriber {
private $myservice;
public function __construct($myservice) {
$this->myservice = $myservice;
}
...
从订阅者中的任何方法通过 class 变量访问服务方法:
$this->myservice->refreshMyField($document);
Listeners/subscribers in Symfony2
新年快乐。
我有一个有 Doctrine 事件的事件订阅者。在其中,我正在尝试调用我已注册的服务。我已经在控制器中调用它并且它在那里工作,但是当我尝试在我的事件订阅者中调用它时我收到错误消息:
Attempted to call method "get" on class "Path\To\My\Class".
Did you mean to call "getSubscribedEvents"?
代码如下所示:
$embedcode_service = $this->get('myproject.mynamespace.myfield.update');
$embedcode_service->refreshMyField($document);
为什么我不能在这个事件订阅者中访问我的服务?我怎样才能访问它?
Cerad 已经回答了我只是要详细说明:
在您的订阅者中注入您的服务:
services:
...
my.subscriber:
class: Acme\SearchBundle\EventListener\SearchIndexerSubscriber
# Service you want to inject
arguments: [ @service_i_want_to_inject.custom ]
tags:
- { name: doctrine.event_subscriber, connection: default }
...
在您的订阅者的 php 代码中,将注入的服务分配给一个 class 变量以便稍后能够访问它:
...
class SearchIndexerSubscriber implements EventSubscriber {
private $myservice;
public function __construct($myservice) {
$this->myservice = $myservice;
}
...
从订阅者中的任何方法通过 class 变量访问服务方法:
$this->myservice->refreshMyField($document);
Listeners/subscribers in Symfony2
新年快乐。