Ran*_*ngh 39 php events symfony observer-pattern symfony-components
我想创建调用的自定义事件,user_logged以便我可以将我的侦听器附加到这些事件.
我想在用户登录时执行一些功能.
Lus*_*ian 76
创建一个扩展的类Symfony\Component\EventDispatcher\Event.
然后,使用事件调度程序服务来调度事件:
$eventDispatcher = $container->get('event_dispatcher');
$eventDispatcher->dispatch('custom.event.identifier', $event);
Run Code Online (Sandbox Code Playgroud)
您可以注册您的事件监听器服务,如下所示:
tags:
- { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
Run Code Online (Sandbox Code Playgroud)
Vla*_*pak 28
这个答案有点延伸答案.
services.yml
custom.event.home_page_event:
class: AppBundle\EventSubscriber\HomePageEventSubscriber
tags:
- { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent }
Run Code Online (Sandbox Code Playgroud)
的appbundle/EventSubscriber/HomePageEventSubscriber.php
namespace AppBundle\EventSubscriber;
class HomePageEventSubscriber
{
public function onCustomEvent($event)
{
var_dump($event->getCode());
}
}
Run Code Online (Sandbox Code Playgroud)
的appbundle /事件/ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
你想要的任何地方,例如在主页控制器中
use AppBundle\Event\HomePageEvent;
// ...
$eventDispatcher = $this->get('event_dispatcher');
$event = new HomePageEvent();
$event->setCode(200);
$eventDispatcher->dispatch('custom.event.home_page_event', $event);
Run Code Online (Sandbox Code Playgroud)