adgauvry/s-entity-listener

Permet l'horodatage sur des entites Symfony

dev-master 2019-12-23 16:15 UTC

This package is auto-updated.

Last update: 2024-04-24 02:05:28 UTC


README

Installation

Executez la commande suivante :

composer require adgauvry/s-entity-listener

Configuration

Il faut ajouter dans services.yaml :

    application_backend.event_listener:
        class: App\Service\MaClasseHorodatage
        tags:
            - { name: doctrine.event_listener, event: onFlush }
        arguments:
           - "@=service('security.token_storage').getToken() != null ? service('security.token_storage' .getToken().getUser() : null"

Il faut également avoir une entité Utilisateur qui doit comporter un champ email et une entité Horodatage qui doit comporter une jointure ManyToOne avec Utilisateur et les champs nomEntite, idEntite, date, action et leur getter/setter correspondant.

Voir un exemple d'entité Horodatage

<?php


use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HorodatageRepository")
 */
class Horodatage
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur")
     * @ORM\JoinColumn(nullable=false)
     */
    private $utilisateur;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $nomEntite;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $idEntite;

    /**
     * @ORM\Column(type="date")
     */
    private $date;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $action;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getUtilisateur(): ?Utilisateur
    {
        return $this->utilisateur;
    }

    public function setUtilisateur(?Utilisateur $utilisateur): self
    {
        $this->utilisateur = $utilisateur;

        return $this;
    }

    public function getNomEntite(): ?string
    {
        return $this->nomEntite;
    }

    public function setNomEntite(string $nomEntite): self
    {
        $this->nomEntite = $nomEntite;

        return $this;
    }

    public function getIdEntite(): ?string
    {
        return $this->idEntite;
    }

    public function setIdEntite(?string $idEntite): self
    {
        $this->idEntite = $idEntite;

        return $this;
    }

    public function getDate(): ?\DateTimeInterface
    {
        return $this->date;
    }

    public function setDate(\DateTimeInterface $date): self
    {
        $this->date = $date;

        return $this;
    }

    public function getAction(): ?string
    {
        return $this->action;
    }

    public function setAction(string $action): self
    {
        $this->action = $action;

        return $this;
    }
}

Usage

Pour pouvoir utiliser l'horodatage, il faut faire hériter une classe par EntityChangeListener. Il faut ensuite implémeter la méthode onFlush.

Pour chaque entité qu'on souhaite surveiller les modifications, on appelle la méthode héritée de EntityChangeListener horodatage avec en 1ère argument l'entité, en 2ème le nom de l'entité et en 3ème les arguments passés dans le OnFlush.

class MaClasseHorodatage extends EntityChangeListener  
{       
    public function onFlush(OnFlushEventArgs $args)  
    {
        parent::horadatage(MaClasse::class,"MaClasse",$args);   
    }  
}