adgauvry/s-entity-listener

允许在Symfony实体上进行时间戳标记

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

This package is auto-updated.

Last update: 2024-09-24 03:08:11 UTC


README

安装

执行以下命令

composer require adgauvry/s-entity-listener

配置

需要在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"

还需要有一个名为用户的实体,该实体必须包含一个email字段,还有一个名为时间戳的实体,该实体必须与用户实体有ManyToOne关联,并包含字段nomEntiteidEntitedateaction及其对应的getter/setter方法。

查看时间戳实体的示例

<?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;
    }
}

用法

要使用时间戳,需要让一个类继承自EntityChangeListener。然后实现onFlush方法。

对于每个希望监视修改的实体,调用从EntityChangeListener继承的方法horodatage,第一个参数是实体,第二个参数是实体名称,第三个参数是传递给OnFlush的参数。

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