我的“CustomEvent(.php)”类在我的“CustomListeren(.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
}
}
我的捆绑服务.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->事件) 日志显示$ this->事件已更改为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->事件必须是instanceof Customofvent。 我想念一个拼图吗?
答案 0 :(得分:0)
我已经从" sendMail"更改了我的方法名称进入"发送邮件" ..
因此,如果遇到此类问题,请尝试更改方法名称。
答案 1 :(得分:0)
最好使用两个具有一个操作的侦听器而不是具有两个操作的侦听器。这应该解决这个问题。
您在一个监听器中使用了两个不同的事件类,而在SecondTrigger()
中,您没有定义它将收到的$event
,因此$this->event
未正确定义。
最佳选择是为两个事件使用两个侦听器,但如果您只想使用一个侦听器,则应在$event
定义您正在等待的secondTrigger()
。