This module dispatches events for several drupal core hooks. This allows you to use the D8 Event Subscriber system instead of the outdated hook system to react on certain events. The module includes events for the most common hooks.
If you want to see new events registered, open an issue in the issue queue and we will try to add it. Hopefully, in the near future, D8 core will put this into core.
To install this module, do the following:
With composer:
composer require drupal/hook_event_dispatcher
Manual installation:
- Extract the tar ball that you downloaded from Drupal.org.
- Upload the entire directory and all its contents to your modules directory.
You can find an example on how to use each Event in src/Example
You can find an example how to add a new preprocess event in src/Example/preprocess_example_module. The event in this module will get dispatched on the specified hook (example) when enabled.
To add your own preprocess event, you need the following three classes:
- [hook]PreprocessEvent
- [hook]EventVariables
- [hook]PreprocessEventFactory
How you name them is of course up to you, but I suggest to name them like the already existing ones for consistency.
This is the event that will fire on the specified hook, which contains the [hook]EventVariables that can be modified by the listener. It should implement PreprocessEventInterface, but I suggest to extend the AbstractPreprocessEvent as that will make your life easier.
Wrapper class for the event variables, with helper functions to add, modify and delete values in the variables array with ease. It should extend the AbstractEventVariables, as that is the base of all variable classes.
This will create the event and the variables so it can be dispatched to the registered listeners. It should implement the interface PreprocessEventFactoryInterface. Furthermore the factory should be defined as a service with the tag preprocess_event_factory.
It is possible to extend an existing event, to add extra wrapper functions to the variables for instance. This works the same way as adding a new event. You need to create a new variables class, which extends the old one and create a factory that will create the existing event with the improved variables. If you give the factory the tag preprocess_event_factory it will have precedence over the default factory, so the old event will not be dispatched.