Quelle est la meilleure façon d'avoir un événement qui se déclenche après l'insertion d'un enregistrement dans Symfony2/Doctrine?Symfony2 - listeners on doctrine/orm
Répondre
D'abord, inscrivez-vous un service comme un écouteur d'événement Doctrine:
app/config.yml
:
services:
foo.listener:
class: Vendor\FooBundle\BarClass
tags:
- { name: doctrine.event_listener, event: postPersist, method: onPostPersist }
Ensuite, dans votre classe d'auditeur, définir une méthode onPostPersist
(ou nom que vous avez la méthode dans la configuration) que prend un argument Doctrine\ORM\Event\LifecycleEventArgs
:
public function onPostPersist(LifecycleEventArgs $eventArgs)
{
// do stuff with the entity here
}
Notez que vous ne pouvez pas passer une instance de EntityManager à la listene r class, car $ eventArgs contient une référence à celui-ci, ce qui entraînera une exception CircularReferenceException.
Doctrine Documentation du projet here. Documentation du projet Symfony here (périmé, mais inclus à titre de référence)/
Essayez d'injecter le conteneur lui-même au lieu du contexte de sécurité. avec FOS_USER, security.context dépend de votre écouteur (EM) et votre écouteur nécessite security.context.
<service id="foo.listener" class="%foo.listener.class%">
<argument type="service" id="service_container"/>
<tag name="doctrine.event_listener" event="postPersist" method="fooMethod" />
</service>
Par ailleurs, au moins en XML, le nom de la méthode ne semble pas fonctionner, par défaut, il appelle la méthode « postPersist » au lieu et ignorer quel que soit le nom que vous donnez méthode (fooMethod); S'il vous plaît laissez-moi savoir si c'est le cas avec la config YAML, aussi, ou je me trompe.
- 1. Symfony2 - Doctrine Listeners
- 2. Action Listeners
- 3. d'action en Listeners Java
- 4. Event listeners in javascript
- 5. Laravel Event Handlers & Listeners
- 6. JSF Adding Action Listeners
- 7. Doctrine - cryptage avec dql listeners
- 8. Spring + EntityManagerFactory + Hibernate Listeners + Injection
- 9. Windows keydown listeners en C
- 10. API Google Maps - Event Listeners
- 11. Basculement Event Listeners et hors programme
- 12. ec2: elb-create-lb-listeners échoue
- 13. Javascript/jQuery mouseover et mouseout Event Listeners
- 14. extJS événements/listeners pour newb à js/extjs
- 15. Symfony2 custom_provider
- 16. Obtenir des données provenant de capteurs Android sans Listeners
- 17. Puis-je ajouter des abonnés listeners/publishers aux objets JAXB?
- 18. Gestion du tableau des labels listeners JAVA GUI
- 19. comment ajouter ctrl - cliquez sur listeners dans l'éditeur java eclipse
- 20. Cliquez sur Listeners in Loop - Array and Closure
- 21. Android - Action Listeners pour une liste de boutons dynamiques
- 22. Comment utilisez-vous multi-listeners dans une méthode? (ANDROID)
- 23. Mise en place une large application Listeners clés
- 24. Symfony2 - StofDoctrineExtensionBundle
- 25. Symfony2: référence clés étrangères dans Symfony2
- 26. Symfony2: Comment rendre l'extension php_intl disponible pour Symfony2?
- 27. avant l'action dans symfony2
- 28. Extensions multiples Twig Symfony2
- 29. Dépendances Symfony2
- 30. héritage Symfony2
Je fais exactement la même chose, mais j'essaie d'inclure une référence à l'objet securityContext dans mon écouteur. J'ai ajouté: arguments: ["@ security.context"] à mon fichier yml mais quand j'ajoute l'objet $ securityContext dans mon constructeur, j'obtiens une erreur circulaire de ref. Des idées? J'utilise le FOSUserBundle et cela se voit dans l'erreur que je reçois. – Jeremy
Voici l'erreur que je reçois. ServiceCircularReferenceException: référence circulaire détectée pour le service "security.context", chemin: "profiler_listener -> profileur -> security.context -> security.authentication.manager -> fos_user.user_manager -> doctrine.orm.default_entity_manager -> doctrine.dbal. default_connection -> my.listener ". – Jeremy