Eventos en Drupal 8: suscribirse a eventos

Imagen

Una de las incorporaciones realizadas a Drupal 8 de Symfony, es el componente Event Dispacher, el cual nos permite lanzar eventos para ampliar nuestros módulos, pero también permite que nuestro código pueda realizar acciones cuando estos se lanzan.

Suscribirse a eventos:

Lo primero que tenemos que saber, es a que evento queremos suscribirnos, una vez sabemos cual es, tenemos que crear una clase que será la que se mantendrá a la espera de que se lance algún evento.

Primero, tenemos que definir la clase en el module.services.yml como EventListener. Si hemos creado servicios en alguna ocasión, veremos que es idéntico y en el mismo archivo, pero tenemos que fijarnos en la etiqueta que se añade, "event_subscriber".

services:
  nireneko.event_subscriber:
    class: Drupal\nireneko\EventSubscriber\NirenekoEventSubscriber
    tags:
    - { name: 'event_subscriber' }

Ahora que tenemos la clase que se mantendrá a la escucha, tenemos que crear la clase, esta ira dentro de nuestro modulo en src/EventSuscriber.

namespace Drupal\nireneko\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class NirenekoEventSubscriber implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = ['onRequest'];
    return $events;
  }

  public function onRequest(GetResponseEvent $event) {
    //Ejecutamos nuestro codigo
  }

}

Ya tenemos nuestra clase que se ejecutara en el evento Request lanzado por el KernelEvent y nuestro código ira en el método "onRequest", el cual es el que esta indicado en el array creado en el método getSubscribedEvents, que es donde indicamos el evento al que nos suscribimos y a que método llamar.

En este caso es un evento lanzado por el componente HttpKernel de Symfony, el cual utiliza Drupal 8. En la documentación de Symfony, podemos encontrar los eventos de los que disponemos en el componente HttpKernel, los cuales también están disponibles en Drupal 8.

Aprender a como suscribirse a los eventos y utilizarlos nos será muy útil, ya que muchos de los hooks de Drupal 7 han sido sustituidos por eventos, y algunos módulos como Commerce, se basan por completo en eventos abandonando los antiguos hooks.

Y como es habitual, os dejo un archivo con código de ejemplo para que lo podáis ver.

Archivo

Artículos relacionados: