Je suis nouveau sur Symfony2 et je voudrais savoir quelle est la différence dans prePersist et preUpdate événements. Il ressemble à prePersist est "tiré" avant que je 'persist' un enregistrement, mais quand est-ce preUpdate feu?
OriginalL'auteur mentalic | 2013-01-15
Aucune de ces fait partie de Symfony en particulier. Ils font partie de Doctrine2. Le prePersist feux au point qu'une entité est persistée. La persistance d'un objet signifie qu'il est géré par la Doctrine de l'entityManager, même si il n'est pas inséré dans la base de données jusqu'à ce qu'un flush.
preUpdate est l'événement correspondant à un objet existant qui est sur le point d'être mis à jour. Parce qu'un objet existant est déjà géré par l'entityManager au point qu'il a été interrogé, il n'y a pas d'équivalent persistent événement. Essentiellement, il se déclenche lorsqu'un objet existant a été modifié, et une chasse d'eau a été appelé.
En d'autres termes, si vous n'avez pas à changer quelque chose dans l'objet, PreUpdate ne fonctionne pas!
Avec cela dit, vous pouvez penser à ces que qui se passe "juste avant d'insérer" et "juste avant la mise à jour".
Il y a aussi 2 formes: callbacks, qui peuvent être annotées directement dans l'entité et a ajouté que les méthodes à l'intérieur d'elle, mais seulement d'avoir accès aux attributs d'entité. Ceux-ci peuvent être bon pour de simples manipulations comme l'horodatage, la conformation des chaînes à une norme particulière, ou de générer des attributs dérivés.
Il y a aussi de vrais des écouteurs d'événement qui doivent être enregistrés auprès de l'entityManager, et d'avoir accès aux données de l'événement qui a le type avant/après les données que vous attendez dans une base de données de déclenchement.
Noter que dans La Doctrine de la version 2.4, ils ont ajouté les Données de l'événement, même pour les callbacks, ce qui fait qu'il est beaucoup plus simple et plus facile de faire le même genre de choses que vous avez précédemment nécessaires à l'utilisation des écouteurs d'événement.
OriginalL'auteur gview
Noter également:
-Si votre organisme n'a pas tout changé les valeurs, les
PreUpdate
ne sera PAS déclenché.De sorte que vous ne pouvez pas compter sur cela pour mettre à jour un timestamp de modification à chaque fois qu'un formulaire est enregistré. Cela est particulièrement difficile si vous avez une collection de formulaires sur une page, et l'utilisateur peut avoir la mise à jour de certains champs de inclus sous forme de collections. Les entités qui ont été mis à jour, qui va déclencher l'
PreUpdate
, mais la forme la plus primaire de l'entité ne sera pas déclencher unePreUpdate
sauf si c'est PROPRE champs ont été mis à jour.-Vous pouvez définir plusieurs cycle de vie de rappel des annotations pour les deux
PrePersist
etPreUpdate
Ainsi, par exemple, si vous souhaitez définir la modification de l'heure lors de l'enregistrement est créé ET est mis à jour, vous pouvez ajouter des annotations à la même fonction, dans l'entité, par exemple
OriginalL'auteur Chadwick Meyer
À partir d'ici: http://docs.doctrine-project.org/en/2.0.x/reference/events.html#lifecycle-events
prePersist - Le prePersist événement se produit pour une entité donnée avant l'EntityManager persistent fonctionnement de cette entité est exécutée.
preUpdate - Le preUpdate événement se produit avant les opérations de mise à jour de la base de données pour les données de l'entité. Il n'est pas appelé pour un DQL instruction de mise à JOUR.
Notez également que c'est pour la Doctrine, pas spécifiquement de Symfony.
OriginalL'auteur MDrollette