2011-05-09 26 views
17

Estoy construyendo una aplicación en Symfony2 que tiene un aspecto social (muchas acciones que realiza un usuario en el sitio aparecerán en una lista de estilo de "alimentación de noticias" para que otros las vean). He determinado que el sistema de escucha/receptor de eventos sf2 es la mejor manera de manejar esto, pero me he encontrado con un problema al tratar de configurar mi oyente para manejar muchos eventos diferentes.escuchando múltiples eventos con un solo oyente?

La documentación (ahora desactualizada) que he encontrado en mis búsquedas parece indicar que, en un momento, los detectores de eventos pudieron registrarse en varios eventos, pero el código se ha refactorizado y ahora la configuración se ve así:

config.yml:

services: 
    social.listener: 
    class: F\Q\C\N\SocialEventListener 
    tags: 
     - { name: kernel.listener, event: onSocialShare } 

¿hay alguna manera de cualquiera:

  1. pasar fácilmente a múltiples eventos (algo así como event: [onSocialShare, onSocialFriend, onSocialCreate] funciona, pero que se siente como que va a obtener rápidamente feo y imposible de mantener, obstruyendo mi fichero de configuración con potencialmente decenas de eventos sociales
  2. definir el evento al que quiero para suscribirse a partir del código (como se hizo anteriormente)
  3. O posiblemente otra, mejor opción que no he pensado aún

Gracias de antemano.

Respuesta

29

Palabra de vuelta de la los usuarios de Symfony grupo de Google (rosca here) es que la manera adecuada de hacerlo es mediante la adición de varios tags:

services: 
    social.listener: 
    class: F\Q\C\N\SocialEventListener 
    tags: 
     - { name: kernel.listener, event: onSocialShare } 
     - { name: kernel.listener, event: onSocialFriend } 
     - { name: kernel.listener, event: ... etc } 

Por lo tanto, parece que en la actualidad, no hay una buena manera de de agregar suscripciones de eventos desde el código de escucha. Oh bien.

+1

Pero esto es bueno para compartir el estado entre cada uno de esos eventos en el mismo clase para que al menos pueda salir temprano de un evento dado si las condiciones no son apropiadas en función de la lógica en otros eventos. –

Cuestiones relacionadas