РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
744 of 1361 menu

Метод addSubscriber

Метод addSubscriber класса EventDispatcher добавляет в диспетчер подписчика событий. Первым параметром передаётся объект, реализующий интерфейс EventSubscriberInterface. Диспетчер читает список событий через метод getSubscribedEvents и автоматически регистрирует все обработчики подписчика.

Синтаксис

public function addSubscriber(EventSubscriberInterface $subscriber): void

Пример

Давайте создадим подписчика, который слушает событие 'user.created':

<?php namespace AppEvent; use SymfonyComponentEventDispatcherEventSubscriberInterface; use SymfonyContractsEventDispatcherEvent; class UserSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ 'user.created' => 'onUserCreated', ]; } public function onUserCreated(Event $event): void { echo 'user created'; } } ?>

Теперь зарегистрируем подписчика в диспетчере:

<?php namespace AppController; use AppEventUserSubscriber; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentEventDispatcherEventDispatcher; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $dispatcher->addSubscriber(new UserSubscriber()); $dispatcher->dispatch(new Event(), 'user.created'); return new Response('done'); } } ?>

Результат выполнения кода:

"user created"

Пример

Давайте подпишем одного подписчика сразу на несколько событий:

<?php namespace AppEvent; use SymfonyComponentEventDispatcherEventSubscriberInterface; use SymfonyContractsEventDispatcherEvent; class ArticleSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ 'article.created' => 'onCreated', 'article.deleted' => 'onDeleted', ]; } public function onCreated(Event $event): void { echo 'created'; } public function onDeleted(Event $event): void { echo 'deleted'; } } ?>

Зарегистрируем подписчика и вызовем оба события:

<?php namespace AppController; use AppEventArticleSubscriber; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentEventDispatcherEventDispatcher; use SymfonyComponentHttpFoundationResponse; use SymfonyContractsEventDispatcherEvent; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $dispatcher->addSubscriber(new ArticleSubscriber()); $dispatcher->dispatch(new Event(), 'article.created'); $dispatcher->dispatch(new Event(), 'article.deleted'); return new Response('done'); } } ?>

Результат выполнения кода:

"createddeleted"

Смотрите также

  • класс EventDispatcher,
    который управляет событиями и слушателями
  • метод dispatch,
    который запускает событие по имени
  • метод addListener,
    который регистрирует одиночный обработчик события
  • интерфейс EventSubscriber,
    который описывает подписчика событий
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить