Symfony6 Techwall #39 Doctrine Utilisation des Traits avec le Lifecycle callback les événements de Doctrine
Appelé aussi les callbacks du cycle de vie, ce sont des méthodes à exécuter par doctrine et dépendant d’événement précis :
PrePersisit
PostPersist ( s’exécute après le flush() non après persist() )
PreUpdate
PostUpdate
PreRemove
PostRemove
Afin d’informer doctrine qu’une entité contient des
clallbacks nous devons utiliser l’annotation
@ORM\HasLifecycleCallbacks()
Ceci ne s’applique que lors de l’utilisation
des annotations
Imaginons maintenant que nous voulons « sécuriser plusieurs de nos entités » et d’avoir un peu d’historique. L’idée est d’avoir deux attributs qui sont createdAt et modifiedAt pour avoir toujours une idée sur la création de notre entité et de sa dernière modification.
L’idée est de créer pour chacune des entités à suivre des lifecycle callback qui vont mettre à jour ces deux attributs lors de la création (prePersisit) et la modification (preUpdate).
Est-ce normal de le refaire pour toutes les entités ?
Si la réponse est non, que faire alors ?
Utiliser les TRAITS
Elles Servent à externaliser du code redondant dans plusieurs classes différentes.
Pourquoi les traits et non l’héritage ? Parce que PHP ne supporte pas l’héritage multiple.
Non instanciable
Un trait peut contenir des méthodes et des attributs
Appelé aussi les callbacks du cycle de vie, ce sont des méthodes à exécuter par doctrine et dépendant d’événement précis :
PrePersisit
PostPersist ( s’exécute après le flush() non après persist() )
PreUpdate
PostUpdate
PreRemove
PostRemove
Afin d’informer doctrine qu’une entité contient des
clallbacks nous devons utiliser l’annotation
@ORM\HasLifecycleCallbacks()
Ceci ne s’applique que lors de l’utilisation
des annotations
Imaginons maintenant que nous voulons « sécuriser plusieurs de nos entités » et d’avoir un peu d’historique. L’idée est d’avoir deux attributs qui sont createdAt et modifiedAt pour avoir toujours une idée sur la création de notre entité et de sa dernière modification.
L’idée est de créer pour chacune des entités à suivre des lifecycle callback qui vont mettre à jour ces deux attributs lors de la création (prePersisit) et la modification (preUpdate).
Est-ce normal de le refaire pour toutes les entités ?
Si la réponse est non, que faire alors ?
Utiliser les TRAITS
Elles Servent à externaliser du code redondant dans plusieurs classes différentes.
Pourquoi les traits et non l’héritage ? Parce que PHP ne supporte pas l’héritage multiple.
Non instanciable
Un trait peut contenir des méthodes et des attributs
- Catégories
- Evenements
Commentaires