Sto lavorando nel framework Symfony2 e mi chiedo quando si dovrebbe usare un utente Doctrine contro un listener. Doctrine's documentation per gli ascoltatori è molto chiaro, tuttavia gli abbonati sono piuttosto ignorati. Symfony's cookbook entry è simile.Listener Doctrine contro Subscriber
risposta
Dal mio punto di vista, c'è solo una differenza sostanziale:
- l'ascoltatore è firmato specificando gli eventi su cui è in ascolto.
- L'Abbonato ha un metodo dire al dispatcher quali eventi si sta ascoltando
Questo potrebbe non sembrare una grande differenza, ma se ci pensate, ci sono alcuni casi in cui si desidera utilizzare uno sopra l'altro:
- È possibile assegnare un ascoltatore a molti dispatcher con diversi eventi, in quanto sono impostati al momento della registrazione. Devi solo accertarti che tutti i metodi siano presenti nell'ascoltatore
- È possibile modificare gli eventi a cui è iscritto un utente in fase di esecuzione e anche dopo aver registrato l'utente modificando il valore di ritorno di
getSubscribedEvents
(Pensa al momento in cui ascolti a un evento molto rumoroso e si desidera eseguire qualcosa una sola volta)
Ci potrebbero essere altre differenze che non sono a conoscenza di!
Quindi, in poche parole, un abbonato è un ascoltatore in cui l'elenco degli eventi monitorati è mutabile? In 'getSubscribedEvents' dovrei quindi restituire un array, qualcosa come' array (Events :: prePersist, Events :: postUpdate) 'Suppongo che? – nurikabe
Sì. Dai un'occhiata qui: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/events.html#the-event-system – Sgoettschkes
Entrambi consentono di eseguire qualcosa su un particolare evento pre/post persistono ecc
Tuttavia ascoltatori consentono solo di eseguire i comportamenti incapsulati all'interno della vostra Entità. Quindi un esempio potrebbe essere l'aggiornamento di un timestamp "date_edited".
Se è necessario spostarsi all'esterno del contesto di Entity, è necessario un sottoscrittore. Un buon esempio potrebbe essere quello di chiamare un'API esterna o se è necessario utilizzare/ispezionare i dati non direttamente correlati all'entità.
Potrei essere frainteso, ma questo suona come la differenza tra un callback del ciclo di vita e un listener di eventi? Sto cercando di determinare quando potrei usare (in termini Symfony2) un 'doctrine.event_subscriber' in opposizione a' doctrine.event_listener'. – nurikabe
Hai ragione, ho letto male la tua domanda, scusa. –
Si dovrebbe usare abbonato evento quando si vuole affrontare con più eventi in una classe, per esempio in questo symfony2 doc page article, si può notare che il listener di eventi in grado di gestire un solo evento, ma diciamo che si vuole affrontare una serie di eventi per un'entità, prePersist, preUpdate, postPersist ecc ... se usi listener di eventi dovresti codificare diversi listener di eventi, uno per ogni evento, ma se vai con un sottoscrittore di eventi devi solo codificare una classe l'evento susbcriber, guarda che con il sottoscrittore dell'evento puoi gestire più di un evento in una classe, questo è il modo in cui lo uso, preferisco il codice focalizzato su ciò di cui il modello ha bisogno, un esempio di questo può essere se vuoi gestire diversi eventi del ciclo di vita globaly solo per un gruppo di entità, per fare ciò è possibile codificare una classe genitore e definire quei metodi globali al suo interno, quindi fare yo le tue entità ereditano quella classe e più tardi nel tuo evento susbcriber ti iscrivi ad ogni evento che vuoi, prePersist, preUpdate, postPersist ecc ... e poi chiedi quella classe genitore ed esegui quei metodi globali.
Forse ti ho frainteso, ma nel mio sperimentare un ascoltatore può gestire più eventi, ad es un Listener può definire le azioni per prePersist, preUpdate, onFlush, ecc. –
@ChadwickMeyer i secondo che 'Questo listener può ascoltare uno o più eventi e viene notificato ogni volta che questi eventi vengono inviati.' direttamente dalla documentazione – Dheeraj
Non so se è fatto accidentalmente o intenzionalmente .. Ma gli abbonati hanno la priorità più alta che gli ascoltatori - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php#L73-L98
Dal lato dottrina, non importa quello che è (ascoltatore o sottoscrittore), alla fine entrambi sono registrati come ascoltatori - https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/EventManager.php#L137-L140
Questo è quello che ho notato.
- 1. Come utilizzare il listener Doctrine OracleSessionInit con Symfony2?
- 2. Listener Doctrine - Esegui azione solo se un campo è cambiato
- 3. RxJava Observable and Subscriber per saltare l'eccezione?
- 4. Entity valid listener listener
- 5. doctrine targetEntity interfaces
- 6. Symfony2 listener di eventi
- 7. aggiungi listener vs set listener
- 8. Doctrine 2 Value Objects
- 9. Persistere altre entità all'interno di preUpdate di Listener di Enttraction di Doctrine
- 10. Doctrine: come rimuovere parte di una clausola where da select query inside listener (preDqlSelect)?
- 11. APL contro A contro J contro K?
- 12. iPad Edicola Subscriber informazioni (nome, e-mail, zip)
- 13. EmberJs supporta il pattern di evento publish/subscriber?
- 14. EventEmitter e Subscriber ES6 Sintassi con React Native
- 15. Hibernate: Listener di eventi o Interceptor, quali sono i pro/contro nella pratica?
- 16. Pro e contro dell'approccio Listener/Observer per notificare Modifiche al modello
- 17. performance listener di eventi Javascript
- 18. Symfony2 Doctrine doctrine: generate: entità non funziona mai
- 19. Doctrine insert in postPersist event
- 20. chrome.webRequest.onAuthRequired Listener
- 21. Rimuovi evento ciclo vitale Doctrine da un controller Symfony2
- 22. Differenza tra listener del mouse e listener di azioni?
- 23. configurare l'estensione doctrine biasimevole con symfony2
- 24. Ajax contro socket Web contro Web Workers
- 25. Symfony2 Doctrine merge
- 26. Doctrine 2, Native Query
- 27. Convalida Doctrine e Zend_Form
- 28. Doctrine OneToMany error error
- 29. Doctrine 2 Close Connection
- 30. PHP Doctrine Eredità
Ross Tuck aveva un Doctrine2 parlare al DutchPHPConference qualche giorno fa. Ha anche trattato gli eventi in Doctrine2 e le sue diapositive sono qui: http://www.slideshare.net/rosstuck/extending-doctrine-2-for-your-domain-model-13257781 forse potrebbe essere qualche info/aiuto extra per te. –