Я хочу создать пользовательские события, называемые user_logged
чтобы я мог присоединить слушателей к этим событиям.
Я хочу выполнять несколько функций всякий раз, когда пользователь вошел в систему.
Создайте класс, который расширяет Symfony\Component\EventDispatcher\Event
.
Затем используйте диспетчер событий для отправки события:
$eventDispatcher = $container->get('event_dispatcher'); $eventDispatcher->dispatch('custom.event.identifier', $event);
Вы можете зарегистрировать службу прослушивателя событий так:
tags: - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
Этот ответ немного расширяет ответ .
services.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
namespace AppBundle\EventSubscriber; class HomePageEventSubscriber { public function onCustomEvent($event) { var_dump($event->getCode()); } }
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; } }
в любом месте, например, в контроллере домашней страницы
use AppBundle\Event\HomePageEvent; // ... $eventDispatcher = $this->get('event_dispatcher'); $event = new HomePageEvent(); $event->setCode(200); $eventDispatcher->dispatch('custom.event.home_page_event', $event);