php 如何在 symfony2 中创建自定义事件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11661057/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to create custom event in symfony2
提问by Mirage
I want to create custom events called user_loggedso that i can attach my listeners to those events.
我想创建调用的自定义事件,user_logged以便我可以将我的侦听器附加到这些事件。
I want to execute few functions whenever user has logged in.
每当用户登录时,我都想执行一些功能。
回答by Lusitanian
Create a class which extends Symfony\Component\EventDispatcher\Event.
创建一个扩展Symfony\Component\EventDispatcher\Event.
Then, use the event dispatcher service to dispatch the event:
然后,使用事件调度器服务来调度事件:
$eventDispatcher = $container->get('event_dispatcher');
$eventDispatcher->dispatch('custom.event.identifier', $event);
You can register your event listener service like so:
您可以像这样注册您的事件侦听器服务:
tags:
- { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
回答by V. Kovpak
This answer is little bit extend answer.
这个答案是一点点扩展答案。
services.yml
服务.yml
custom.event.home_page_event:
class: AppBundle\EventSubscriber\HomePageEventSubscriber
tags:
- { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent }
AppBundle/EventSubscriber/HomePageEventSubscriber.php
AppBundle/EventSubscriber/HomePageEventSubscriber.php
namespace AppBundle\EventSubscriber;
class HomePageEventSubscriber
{
public function onCustomEvent($event)
{
var_dump($event->getCode());
}
}
AppBundle/Event/HomePageEvent.php
AppBundle/Event/HomePageEvent.php
namespace AppBundle\Event;
use Symfony\Component\EventDispatcher\Event;
class HomePageEvent extends Event
{
private $code;
public function setCode($code)
{
$this->code = $code;
}
public function getCode()
{
return $this->code;
}
}
anywhere you wish, for example in home page controller
您希望的任何地方,例如在主页控制器中
use AppBundle\Event\HomePageEvent;
// ...
$eventDispatcher = $this->get('event_dispatcher');
$event = new HomePageEvent();
$event->setCode(200);
$eventDispatcher->dispatch('custom.event.home_page_event', $event);

