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

Метод removeSubscriber

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

Синтаксис

removeSubscriber(EventSubscriberInterface $subscriber): void

Пример

Давайте создадим подписчика, добавим его в диспетчер, а затем удалим методом removeSubscriber:

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

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

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

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

"done"

Пример

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

<?php namespace AppController; use AppEventArticleSubscriber; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentEventDispatcherEventDispatcher; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $subscriber = new ArticleSubscriber(); $dispatcher->addSubscriber($subscriber); $dispatcher->removeSubscriber($subscriber); $listeners = $dispatcher->getListeners('article.created'); return new Response((string) count($listeners)); } } ?>

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

"0"

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

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