How to set event handlers in a compact form in Symfony?

82 Views Asked by At

I'm writing a Symfony 4 application. Its core is a process with some nested sub-processes. In general, the idea, how to handle it looks like this:

There are some processes (hierarchy of the main processes and its sub-processes). Every process has a set of states. Every process has a set of allowed events.

The facade of this mechanism is the SystemEventHander. It registers the handled processes, analyses the incoming requests, and find and execute the appropriate handler for the current event.

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 }

So my all custom events are initially handled by only one handler: the SystemEventHandler().

The proble is, that for every single event I have to write nearly the same line:

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

Only process_name:event_name varies, the rest is static.

Image I have a big number of events -- 30? 50? 100? How can I avoid explicitly writing a new line for every single one?

0

There are 0 best solutions below