Метод 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,
который реализует подписчик событий