Метод getSubscribedEvents класса EventSubscriber
Метод getSubscribedEvents объявляется внутри класса,
реализующего интерфейс EventSubscriberInterface.
Он возвращает массив, где ключами являются имена событий,
а значениями - методы класса, которые нужно вызвать при
возникновении этих событий. В значении можно указать
метод строкой, массивом из метода и приоритета или
массивом из нескольких таких массивов.
Метод вызывается автоматически диспетчером событий
EventDispatcher при регистрации подписчика.
Приоритет по умолчанию равен нулю: чем выше число,
тем раньше будет вызван обработчик.
Синтаксис
public static function getSubscribedEvents(): array
{
return [
'event.name' => 'onEventName',
];
}
Пример
Давайте создадим подписчик, который слушает событие
'article.created' и выводит сообщение:
<?php
namespace AppEventSubscriber;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentEventDispatcherEvent;
class ArticleSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
'article.created' => 'onArticleCreated',
];
}
public function onArticleCreated(Event $event): void
{
echo 'article created';
}
}
?>
Результат выполнения кода при вызове события:
"article created"
Пример
Давайте укажем приоритет обработчика через массив:
<?php
namespace AppEventSubscriber;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentEventDispatcherEvent;
class ArticleSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
'article.created' => ['onArticleCreated', 10],
];
}
public function onArticleCreated(Event $event): void
{
echo 'article created';
}
}
?>
Обработчик с приоритетом 10 будет вызван раньше
обработчиков с меньшим приоритетом.
Пример
Давайте подпишем один класс на несколько событий:
<?php
namespace AppEventSubscriber;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentEventDispatcherEvent;
class ArticleSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
'article.created' => 'onArticleCreated',
'article.updated' => 'onArticleUpdated',
'article.deleted' => [
['onArticleDeleted', 20],
],
];
}
public function onArticleCreated(Event $event): void
{
echo 'created';
}
public function onArticleUpdated(Event $event): void
{
echo 'updated';
}
public function onArticleDeleted(Event $event): void
{
echo 'deleted';
}
}
?>
Результат выполнения кода при вызове события
'article.deleted':
"deleted"
Смотрите также
-
интерфейс
EventSubscriber,
который реализует класс подписчика -
метод
addSubscriber,
который регистрирует подписчика в диспетчере -
метод
dispatch,
который вызывает событие -
метод
addListener,
который регистрирует отдельный обработчик