Tracker les dates de création / modification de vos entités Doctrine

Publié le 12/10/2019
Tracker les dates de création / modification de vos entités Doctrine

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 :

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