#php #events #symfony5
#php #Мероприятия #symfony5
Вопрос:
ВСЕ
Я хотел бы прослушать событие в пользовательском пакете. Я знаю, что проблема заключается в подключении события, потому что, когда я использую его в основном пути, он работает. Мой код прост:
Во-первых, у меня есть класс событий, такой как BeforeCrudActionEvent, который имеет некоторые поля / методы по умолчанию. Во-вторых, я создаю экземпляр своего класса событий и отправляю его с помощью EventDispatcherInterface, подобного этому:
$event = new BeforeCrudActionEvent();
$this->get('event_dispatcher')->dispatch($event);
Имя события не определено, и оно генерируется автоматически (состоит из пространства имен и имени класса).
Наконец, я создал класс Subscriber, который реализует EventSubscriberInterface
class TestSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
BeforeCrudActionEvent::class => ['updateList']
];
}
public function updateList(BeforeCrudActionEvent $event)
{
throw new Exception("It's works");
}
}
Как я писал ранее, когда класс подписчика находится в главном каталоге, он работает, но когда он находится в пользовательском пакете, это не так. Я уверен, что его нужно добавить в файл service.yaml, но я не могу найти эту конфигурацию в документации. Какой тег и какое событие (если требуется) я должен использовать?
Ответ №1:
в конце абзаца в документе написано :
Вы также можете вручную добавить тег kernel.event_subscriber.
Итак, вам нужно зарегистрировать свой EventSubscriber в сервисе и добавить тег «kernel.event_subscriber».
NameSpaceTestSubscriber:
tags:
- { name: kernel.event_subscriber }
После этого вы можете проверить, настроен ли ваш подписчик на вызов php bin / console debug:event-dispatcher «event.name «