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: trueEnsuite, 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