Как установить обработчики событий в компактной форме в Symfony?

Я пишу приложение для Symfony 4. Его ядро ​​- это процесс с несколькими вложенными подпроцессами. В общем, идея, как с этим справиться, выглядит так:

Есть несколько processes (иерархия основных процессов и их подпроцессов). У каждого процесса есть набор state. У каждого процесса есть набор разрешенных event.

Фасадом этого механизма является SystemEventHander. Он регистрирует обрабатываемые процессы, анализирует входящие запросы, а также находит и выполняет соответствующий обработчик для текущего события.

services.yaml

# events
App\Process\SystemEventHandlerInterface:
    class: 'App\Process\SystemEventHandler'
    tags:
        - { name: kernel.event_listener, event: general:user_message_received, method: handle }
        - { name: kernel.event_listener, event: process_a:foo, method: handle }
        - { name: kernel.event_listener, event: process_a.process_b:foo, method: handle }
        - { name: kernel.event_listener, event: process_a.process_c:bar, method: handle }
        - { name: kernel.event_listener, event: process_a.process_d:baz, method: handle }
        - { name: kernel.event_listener, event: process_a.process_d.process_e:buz, method: handle }

Таким образом, все мои пользовательские события изначально обрабатываются только одним обработчиком: SystemEventHandler().

Проблема в том, что для каждого отдельного события я должен писать примерно одну и ту же строку:

- { name: kernel.event_listener, event: process_name:event_name, method: handle }

Меняется только process_name:event_name, остальное статично.

Image У меня большое количество мероприятий - 30? 50? 100? Как я могу избежать явного написания новой строки для каждой отдельной строки?

Подписчики событий - это то, что вы ищете. Конечно, если у вас действительно получается 100 различных типов событий, которые обрабатываются одним и тем же слушателем, я подозреваю, что у вас может быть недостаток дизайна.
Cerad 17.07.2018 21:57

@Cerad Спасибо за ваш комментарий! Я знаю, что вы имеете в виду под «недостатком дизайна», но думаю, здесь дело обстоит не так. Причина в том, что у меня на самом деле несколько Process, каждый процесс может иметь State, а обработчики на самом деле выглядят как App\ProcessHandling\ProcessFoo/StateBar#onEventBuz(...). App\Process\SystemEventHandler\handle(...) - это просто вход / фасад.

automatix 30.07.2018 21:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
2
64
0

Другие вопросы по теме