Horodatage automatique des Entity

Dans une base de données c’est toujours intéressant de savoir quand un enregistrement a été créé et modifié et par qui.

Avec symfony et doctrine c’est très simple : nous allons utiliser les listener.

Il faut d’abord ajouter 4 zones sur les entités sur lesquelles vous voulez les infos de traçage :

La notion nullable=true permet d’avoir null dans cette zone, ce qui permet par exemple de tracer les enregistrements créés et modifiés par des utilisateurs anonyme.

La commande magique qui va créer les getters et setters : (update du 16/12/2017 : dans Symfony 4 cette commande ne fonctionne plus, il faut soit les créer à la main, soit passer par votre IDE)

Pour mettre à jour la base de données il y a 2 choix, si les entity que vous allez mettre à jour ne contiennent pas de données, alors super facile :

Par contre si elles contiennent des données, il faut modifier le script généré, sinon vous allez avoir un message d’erreur du style « Constraint violation », pour récupérer le script :

Le script généré et modifié (ajout de « DEFAUT ‘1900-01-01 » à 2 endroits) :

Il faut ensuite créer la classe qui mettra à jour ses zones, par exemple AppBundle\EventListener\MajInfosEntityListener, cette classe doit comporter 2 fonctions : prePersist et preUpdate

prePersit se déclenchera avant tout persist (insert)

preUpdate se déclenchera avant tout flush (update)

Il ne reste plus qu’à déclarer la classe comme service dans le fichier AppBundle/app/config/services.yml :

Have fun !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *