Symfony5 прослушивает пользовательское событие в пакете

#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 «