[英]Symfony2: event changes into listener
在我的“ CustomListeren(.php)”中將我的“ CustomEvent(.php)”類設置為$ event屬性。
在kernel.terminate上,$ event屬性從“ CustomEvent”更改為“ CustomListener”(空對象)。
# CustomEvent.php
namespace Stackoverflow\AwesomeBundle\Event;
use Symfony\Component\EventDispatcher\Event;
class CustomEvent extends Event {
protected $data;
/**
* @param Data $data
*/
public function __construct(Data $data) {
$this->data = $data;
}
/**
* @return Data
*/
public function getdata() {
return $this->data;
}
}
和
# CustomListener.php
namespace Stackoverflow\AwesomeBundle\Event;
class CustomListener {
/**
* @var CustomEvent
*/
protected $event;
/**
* @param CustomEvent $event
*/
public function firstTrigger(CustomEvent $event) {
// indeed instanceof CustomEvent
$this->event = $event;
}
public function secondTrigger() {
// $this->event is now instanceof CustomListener instead of CustomEvent
if ($this->event instanceof CustomEvent) {
// ... code logic
}
}
}
我的控制器
# CustomController
namespace Stackoverflow\AwesomeBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Stackoverflow\AwesomeBundle\Data;
use Stackoverflow\AwesomeBundle\Event\CustomEvent;
class CustomController extends Controller {
public function customAction(Request $request) {
// ... code
$data = new Data();
$this->get('event_dispatcher')->dispatch(
'nameIsNotImportant',
new CustomEvent($data)
);
// ... code
}
}
我的捆綁軟件services.yml
parameters:
custom.listener.class: Stackoverflow\AwesomeBundle\Event\CustomListener
services:
custom_listener:
class: %custom.listener.class%
tags:
- { name: kernel.event_listener, event: nameIsNotImportant, method: firsTrigger }
- { name: kernel.event_listener, event: kernel.terminate, method: secondTrigger }
我在CustomListener :: secondTrigger()中做了一個get_class($ this-> event),日志顯示$ this-> event變成了CustomListener
[2014-04-25 15:20:16] app.DEBUG: Pointer\Revlect\SecurityBundle\Event\ResetTokenEvent [] []
...
[2014-04-25 15:20:16] app.DEBUG: Pointer\Revlect\SecurityBundle\Event\ResetTokenListener [] []
[2014-04-25 15:20:16] event.DEBUG: Notified event "kernel.terminate" to listener "Stackoverflow\AwesomeBundle\Event\CustomListener::secondTrigger". [] []
在CustomListener :: secondTrigger()中,$ this-> event必須是CustomEvent的實例。 我想念一塊拼圖嗎???
我已將方法名稱從“ sendMail”更改為“ sendsMail”。
因此,如果遇到此類問題,請嘗試更改您的方法名稱。
最好是使用兩個偵聽器執行一個動作,而不是使用該偵聽器執行兩個動作。 那應該解決這個問題。
您在一個偵聽器中使用了兩個不同的Event類,並且在SecondTrigger()
您沒有定義它將接收的$event
,因此未正確定義$this->event
。
最好的選擇是對兩個事件使用兩個偵聽器,但是如果畢竟只想使用一個偵聽器,則應該在secondTrigger()
處定義要等待的$event
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.