Doctrine de l'Auditeur rapport de l'Abonné
Je travaille dans le framework Symfony2 et je me demandais quand allait-on utiliser une Doctrine de l'abonné par rapport à un auditeur. La Doctrine de l' la documentation pour les auditeurs est très clair, cependant, les abonnés sont plutôt passées sous silence. Symfony est livre de cuisine de l'entrée est similaire.
- Ross Tuck avait un Doctrine2 parler sur le DutchPHPConference il y a quelques jours. Il traite également les événements dans Doctrine2, et ses slides sont ici: slideshare.net/rosstuck/... peut-être il pourrait y avoir quelques infos supplémentaires/aide pour vous.
- Vous n'avez pas vraiment besoin d'auditeurs dans votre propre code. Voir Ne jamais utiliser des Écouteurs pour une réponse plus détaillée
Vous devez vous connecter pour publier un commentaire.
De mon point de vue, il y a seulement une différence majeure:
Cela pourrait ne pas sembler une grosse différence, mais si vous pensez à ce sujet, il y a certains cas où vous souhaitez utiliser l'un sur l'autre:
getSubscribedEvents
(Pensez à un moment où l'on écoute une très bruyant événement et que vous souhaitez seulement à exécuter quelque chose une fois)Il pourrait y avoir d'autres différences que je ne suis pas au courant si!
getSubscribedEvents
que je ne puis renvoyer un tableau, quelque chose commearray(Events::prePersist, Events::postUpdate)
je suppose?Ne sais pas si c'est fait accidentellement ou intentionnellement.. Mais les abonnés ont une priorité plus élevée que les auditeurs - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php#L73-L98
De la doctrine côté, il ne se soucie pas ce que c'est (auditeur ou de l'abonné), finalement les deux sont inscrits à titre d'auditeurs - https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/EventManager.php#L137-L140
C'est ce que j'ai repéré.
Vous devez utiliser l'événement de l'abonné lorsque vous voulez traiter avec de multiples événements dans une classe, par exemple, dans ce symfony2 doc page de l'article, on peut constater que les écouteur d'événement ne peut gérer qu'un seul événement, mais disons que vous voulez traiter avec plusieurs événements pour une entité, prePersist, preUpdate, postPersist etc... si vous utilisez l'écouteur d'événement que vous auriez à code plusieurs écouteur d'événement, un pour chaque événement, mais si vous allez avec l'abonné, il suffit de coder une classe de l'événement susbcriber, look avec l'événement abonné, vous pouvez gérer plus d'un événement dans une classe, c'est bien la façon dont je l'utilise, j'préférez code concentré dans ce que le modèle d'affaires de besoin, un exemple de ce que peut être allé vous souhaitez gérer plusieurs événements de cycle de vie globalement uniquement pour un groupe d'entités, de faire ce que vous pouvez de code d'une classe parent et défini ces méthodes globales, alors faites de votre entités hériter de cette classe et, plus tard, dans votre cas susbcriber vous vous abonnez à chaque événement que vous souhaitez, prePersist, preUpdate, postPersist etc... et ensuite demander que les parents de la classe et de l'exécution de ces méthodes globales.
Les deux vous permettent d'exécuter quelque chose sur un événement particulier pré /post persistent etc.
Cependant d'auditeurs seulement vous permettent d'exécuter des comportements encapsulés au sein de votre Entité. Donc, un exemple pourrait être la mise à jour d'un "date_edited" timestamp.
Si vous avez besoin de se déplacer à l'extérieur du contexte de votre Entité, vous aurez besoin d'un abonné. Un bon exemple peut être pour l'appel d'une API externe, ou si vous avez besoin d'utiliser /d'inspecter les données ne sont pas directement liées à votre Entité.
doctrine.event_subscriber
par opposition àdoctrine.event_listener
.Une autre chose importante: la Doctrine EventSubscribers ne vous permettent pas de définir une priorité.
Lire davantage sur cette question ici
Ici est ce que le doc a dit à ce sujet dans la section 4.1.
Comme c'est appliquée dans le monde à des événements, je suppose que c'est aussi valable pour la Doctrine (pas sûr à 100%).
http://symfony.com/doc/master/event_dispatcher.html#listeners-or-subscribers
À partir de la documentation :
Voir l'exemple ici :
https://symfony.com/doc/3.3/components/event_dispatcher.html