Estoy trabajando en el marco de Symfony2 y me pregunto cuándo se usaría un suscriptor de Doctrine versus un oyente. Doctrine's documentation para oyentes es muy claro, sin embargo, los suscriptores se pasan por alto. Symfony's cookbook entry es similar.Oyente de Doctrina versus Suscriptor
Respuesta
Desde mi punto de vista, sólo hay una diferencia importante:
- El oyente se inscribió especifica los eventos en el que escucha.
- El suscriptor tiene un método diciendo que el despachador qué eventos se está escuchando a
Esto podría no parecer una gran diferencia, pero si se piensa en ello, hay algunos casos en los que desea utilizar uno sobre el otro:
- Puede asignar un oyente a muchos despachadores con diferentes eventos, ya que están configurados en el momento del registro. Solo necesita asegurarse de que todos los métodos estén en su lugar en el oyente
- Puede cambiar los eventos en los que se registra un suscriptor en tiempo de ejecución e incluso después de registrar el suscriptor cambiando el valor de retorno de
getSubscribedEvents
(piense en un momento en el que escucha a un evento muy ruidoso y solo quiere ejecutar algo una vez)
¡Sin embargo, podría haber otras diferencias que no conozco!
Entonces, en pocas palabras, ¿un suscriptor es un oyente donde la lista de eventos monitoreados es mutable? En 'getSubscribedEvents', entonces devolvería una matriz, algo así como' array (Events :: prePersist, Events :: postUpdate) '¿Supongo? – nurikabe
Sí. Eche un vistazo aquí: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/events.html#the-event-system – Sgoettschkes
Ambas le permiten ejecutar algo en un evento en particular pre/post persisten etc.
Sin embargo oyentes sólo le permiten ejecutar comportamientos encapsulados dentro de su Entidad. Así que un ejemplo podría ser actualizar una marca de tiempo "date_edited".
Si necesita mudarse fuera del contexto de su Entidad, necesitará un suscriptor. Un buen ejemplo podría ser llamar a una API externa, o si necesita utilizar/inspeccionar datos que no están directamente relacionados con su Entidad.
Podría estar malinterpretando, pero esto suena como la diferencia entre una devolución de llamada de ciclo de vida y un oyente de evento? Estoy tratando de determinar cuándo podría usar (en términos de Symfony2) un 'doctrine.event_subscriber' en lugar de' doctrine.event_listener'. – nurikabe
Tienes razón, leí tu pregunta, disculpas. –
Debe utilizar el suscriptor de eventos cuando desee tratar múltiples eventos en una clase, por ejemplo en este symfony2 doc page article, se puede notar que el oyente de eventos solo puede administrar un evento, pero digamos que desea tratar varios eventos para una entidad, prePersist, preUpdate, postPersist, etc. ... si usa el detector de eventos, debe codificar varios escuchas de eventos, uno para cada evento, pero si va con el suscriptor de eventos, solo tiene que codificar una clase, el suscriptor de eventos, mirar que con el suscriptor del evento puede administrar más de un evento en una clase, así es como lo uso, prefiero el código enfocado en lo que necesita la empresa modelo, un ejemplo de esto puede ser que quiera manejar varios eventos del ciclo de vida globaly solo para un grupo de tus entidades, para hacer eso puedes codificar una clase padre y definir los métodos globales en ella, y luego Nuestras entidades heredan esa clase y más tarde en el evento suscriptor, usted se suscribe a cada evento que desee, prePersist, preUpdate, postPersist, etc. ... y luego solicite esa clase principal y ejecute esos métodos globales.
Puede que le haya malinterpretado, pero en mi la experiencia de un oyente puede gestionar múltiples eventos, por ejemplo un oyente puede definir acciones para prePersist, preUpdate, onFlush, etc. –
@ChadwickMeyer yup i que 'este oyente puede escuchar uno o más eventos y se le notifica cada vez que se envían esos eventos.' directamente desde el documento – Dheeraj
no sabe si se hace accidental o intencionalmente .. Pero los suscriptores tienen mayor prioridad que los oyentes - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php#L73-L98
Desde el lado doctrina, no le importa lo que es (oyente o abonado), con el tiempo, tanto están registrados como oyentes - https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/EventManager.php#L137-L140
Esto es lo que vi.
- 1. Método de suscriptor vs evento
- 2. Cómo usar Doctrine OracleSessionInit oyente con Symfony2?
- 3. WCF Pub/Sub con caché de suscriptor
- 4. Suscriptor AMQP dentro de la aplicación Rails
- 5. pymssql versus pyodbc versus adodbapi versus ...
- 6. Oyente de acciones Java
- 7. Oyente de red Android
- 8. ACTIVEMQ- suscriptor editorial hello world ejemplo
- 9. _Expand versus new versus GNU
- 10. metaphone versus soundex versus NYSIIS
- 11. Control.ResolveUrl versus Control.ResolveClientUrl versus VirtualPathUtility.ToAbsolute
- 12. Oyente de creación de subprocesos
- 13. Herencia Doctrina PHP
- 14. Doctrina, ¿o dónde?
- 15. Doctrina subconsulta en InnerJoin
- 16. doctrina: QueryBuilder vs createQuery?
- 17. Doctrina - subconsulta desde
- 18. Doctrina 2, nativo de consulta
- 19. Doctrina uso de memoria consulta
- 20. Doctrina 2 Generador de consultas
- 21. findByExample en Doctrina
- 22. Symfony2 Doctrina consulta
- 23. dependencia inyectar servlet oyente
- 24. OnCompletion oyente con MediaPlayer
- 25. jmeter - oyente interpretación de resultados
- 26. androide cambio de idioma oyente
- 27. Oyente de directorio en Java
- 28. ExtJS eliminar oyente
- 29. Implementación de devolución de llamada del suscriptor Pubsubhubbub en PHP
- 30. ¿Admite EmberJs el patrón de evento de publicación/suscriptor?
Ross Meta tenía una Doctrine2 hablar sobre el DutchPHPConference hace unos días. También trató los eventos en Doctrine2, y sus diapositivas están aquí: http://www.slideshare.net/rosstuck/extending-doctrine-2-for-your-domain-model-13257781 tal vez podría ser algo de información extra/ayuda para ti. –