Tracker les dates de création / modification de vos entités Doctrine
Publié le 12/10/2019
Cela peut être pratique de gérer dans certaines de vos entités Doctrine une date de modification et/ou de création d'un enregistrement.
Pour cela, il existe une extension très pratique, https://github.com/Atlantic18/DoctrineExtensions
Et pour Symfony, Stof a créé un bundle pour ça : https://github.com/stof/StofDoctrineExtensionsBundle
Il vous suffit de l'installer, et avec flex (Symfony 4), c'est très simple, tout est géré.
Allez vérifier que dans le fichier config/packages/stof_doctrine_extensions vous avez bien activé l'extension Timestampable :
Pour cela, il existe une extension très pratique, https://github.com/Atlantic18/DoctrineExtensions
Et pour Symfony, Stof a créé un bundle pour ça : https://github.com/stof/StofDoctrineExtensionsBundle
Il vous suffit de l'installer, et avec flex (Symfony 4), c'est très simple, tout est géré.
Allez vérifier que dans le fichier config/packages/stof_doctrine_extensions vous avez bien activé l'extension Timestampable :
stof_doctrine_extensions: orm: default: timestampable: true
Ensuite, pour intégrer cela facilement dans vos entités (et sur tous vos projets), créez un Trait :
<?php namespace App\Entity\Behavior; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; /** * Trait TimestampableTrait */ trait TimestampableTrait { /** * @var \DateTime * * @Gedmo\Timestampable(on="create") * @ORM\Column(type="datetime", name="created_at") */ protected $createdAt; /** * @var \DateTime * * @Gedmo\Timestampable(on="update") * @ORM\Column(type="datetime", name="updated_at") */ protected $updatedAt; /** * @return \DateTime */ public function getCreatedAt() { return $this->createdAt; } /** * @param \DateTime $createdAt * * @return $this */ public function setCreatedAt($createdAt) { $this->createdAt = $createdAt; return $this; } /** * @return \DateTime */ public function getUpdatedAt() { return $this->updatedAt; } /** * @param \DateTime $updatedAt * * @return $this */ public function setUpdatedAt($updatedAt) { $this->updatedAt = $updatedAt; return $this; } }
Pour l'utiliser dans une entité, c'est très, très simple, ajouter une seule ligne !!!
<?php namespace App\Entity; use App\Entity\Behavior\TimestampableTrait; /** * @ORM\Entity(repositoryClass="App\Repository\PostRepository") */ class Post { // Ajoutez cette ligne (n'oubliez pas le use au dessus) use TimestampableTrait; /** * @ORM\Column(type="string", length=255) */ private $title; // Suite de votre entité.........
Le bundle et Doctrine extensions s'occupent de tout, en utilisant la gestion événementielle de Symfony :)
Commentaires
Ajoutez votre commentaire