Hoy vamos a ver como crear eventos en Symfony3.
Los eventos dentro de Symfony no son más que un tipo de servicio que nos permite tener una funcionalidad hecha y que esa funcionalidad se lance cuando nosotros se lo indiquemos y cuando sea necesario, de está forma podríamos reutilizar un evento tantas veces como quisiéramos. Por ejemplo, podríamos tener un evento para enviar correos o para guardar notificaciones, y que cada vez que hiciéramos alguna acción que requiera guardar una notificación, con el dispatcher lanzaríamos el evento. Yo simplemente lo veo como un concepto interesante, pero realmente no es ninguna revolución, es simplemente una clase con un método o unos métodos que posteriormente serán llamados.
Vamos directamente a la práctica y vamos a crear un evento en Symfony 3.
Primero creamos un directorio Event en nuestro bundle y dentro creamos nuestro evento. Dentro de la clase del evento podríamos tener muchos métodos y propiedades.
<?php namespace AppBundle\Event; use Symfony\Component\EventDispatcher\Event; class PruebasEvent extends Event { private $code; public function setCode($code) { $this->code = $code; } public function getCode() { return $this->code; } }
Ahora crearemos la clase que se suscribirá al evento dentro de un directorio llamado EventSubscriber.
<?php namespace AppBundle\EventSubscriber; class PruebasEventSubscriber { public function onCustomEvent($event) { var_dump($event->getCode()); } public function onSuperEvento($event) { var_dump("LLAMANDO A LA FUNCIONALIDAD DE UN EVENTO"); } }
Ahora para poder usar todo esto tenemos que añadir el evento como servicio. Le indicamos la clase del subscriber y le indicamos que evento va usar y que método va a lanzar
services: custom.event.home_page_event: class: AppBundle\EventSubscriber\PruebasEventSubscriber tags: - { name: kernel.event_listener, event: custom.event.pruebas_event, method: onSuperEvento }
El último paso seria utilizarlo en nuestro controlador, cuando sea necesario.
use AppBundle\Event\PruebasEvent; // Creamos el objeto del evento $event = new HomePageEvent(); $event->setCode(200); // Lanzar evento $eventDispatcher = $this->get('event_dispatcher'); $eventDispatcher->dispatch('custom.event.home_page_event', $event);
Con esto ya sabemos usar y crear eventos en Symfony3.
Más información:
http://stackoverflow.com/questions/11661057/how-to-create-custom-event-in-symfony2