79 votes

L'auditeur de la doctrine par rapport à l'abonné

Je travaille dans le cadre de Symfony2 et je me demande quand utiliser un abonné Doctrine plutôt qu'un écouteur. La méthode de Doctrine documentation pour les auditeurs est très clair, mais les abonnés sont plutôt négligés. L'interface de Symfony entrée du livre de recettes est similaire.

0 votes

Ross Tuck a fait une présentation sur Doctrine2 lors de la DutchPHPConference il y a quelques jours. Il a également traité les événements dans Doctrine2, et ses diapositives sont ici : slideshare.net/rosstuck/ peut-être que cela pourrait vous apporter des informations ou une aide supplémentaires.

0 votes

Vous n'avez vraiment pas besoin de listeners dans votre propre code. Voir N'utilisez jamais d'écouteurs pour une réponse plus détaillée

3voto

Lee Davis Points 1842

Les deux vous permettent d'exécuter quelque chose sur un événement particulier pré/post persist etc.

Toutefois, les listeners ne vous permettent d'exécuter que les comportements encapsulés dans votre entité. Ainsi, un exemple pourrait être la mise à jour d'un horodatage "date_edited".

Si vous avez besoin de vous déplacer en dehors du contexte de votre entité, vous aurez besoin d'un abonné. Un bon exemple pourrait être l'appel d'une API externe, ou si vous devez utiliser / inspecter des données qui ne sont pas directement liées à votre Entité.

5 votes

Je ne comprends peut-être pas bien, mais cela ressemble à la différence entre un rappel de cycle de vie et un écouteur d'événement ? J'essaie de déterminer quand je peux utiliser (en termes de Symfony2) un appel de cycle de vie et un écouteur d'événements. doctrine.event_subscriber à l'opposé de doctrine.event_listener .

0voto

Extrait de la documentation :

La manière la plus courante d'écouter un événement est d'enregistrer un écouteur avec le répartiteur. Ce récepteur peut écouter un ou plusieurs et est notifié chaque fois que ces événements sont distribués.

Une autre façon d'écouter les événements est d'utiliser un abonné aux événements. Un abonné est une classe PHP qui est capable d'indiquer au répartiteur exactement à quels événements il doit s'abonner. Elle implémente la classe l'interface EventSubscriberInterface, qui requiert une seule méthode statique appelée getSubscribedEvents().

Voir l'exemple ici :

https://symfony.com/doc/3.3/components/event_dispatcher.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X