adgauvry / s-entity-listener
Permet l'horodatage sur des entites Symfony
Requires
- php: >=5.4.0
- symfony/orm-pack: >=1.0.0
This package is auto-updated.
Last update: 2024-11-24 03:29:58 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); } }