Category Archives: Symfony2

Eventos en Symfony2

Este artículo es un resumen práctico-recordatorio de lo necesario para implementar eventos en un Bundle de Symfony2. Para una guía detallada recomiendo visitar este enlace o la doc oficial.

Si te tenemos el Bundle Acme/DemoBundle:

  1. Crear la clase Acme/DemoBundle/DemoEvents.php donde se definirán las constantes con el nombre de los diferentes eventos
  2. Crear la carpeta Acme/DemoBundle/Event. Aquí se almacenarán las clases que representan los eventos, por ejemplo MyActionEvent.php. La clase tendrá que recibir en el constructor las clases con las que el Listener trabajará.
  3. Crear la carpeta Acme/DemoBundle/EventListener. Aquí se guardarán las clases que hacen el trabajo lógico que realmente queremos implementar. Serán los Listeners o los Subscribers. Por ejemplo, Acme/DemoBundle/SendEmailListener.php. La clase implentará métodos.
  4. Definir el Listener como servicio en Acme/DemoBundle/Resources/config/listeners.yml.
  5. Lanzar el Evento desde donde se necesite (un controlador, un manager, etc…) utilizando el servicio EventDispatcher.

Hay muchos matices dependiendo si se utiliza un Listener o un Subscriber.

Crear entidades en Doctrine desde el mapping

Generar todas las entidades para un Bundle concreto:

php app/console doctrine:generate:entities MyMainBundle --path="./src"

Generar una entidad concreta

php app/console doctrine:generate:entities MyMainBundle:MyEntity --path="./src"

Cuando se ejecuta el comanda y tiene que generar una Entidad ya existente, generará un backup de esa clase antes de modificarla. En el nuevo archivo se definirán los nuevo atributos y los nuevos métodos getters y setters. Probablemente la función __construct() no la tocará.