Вы можете использовать этот пакет StofDoctrineExtensionsBundle.И активируйте расширения по своему усмотрению.
в конфигурации yaml вы можете активировать метку времени.
stof_doctrine_extensions:
default_locale: en_US
orm:
default:
timestampable: true
, и вы можете использовать TimestampableEntity в вашей сущности следующим образом.
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\TokenRepository")
* @ORM\Table(name="tokens")
*/
class Token
{
use TimestampableEntity;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
}
поэтому он будет автоматически обновлять поля даты updated_at и creation_at.:)
но если вы хотите сделать прослушиватель событий для другого поля.Вы можете создать этот слушатель следующим образом.
в services.yaml add
App\EventListener\EntityListener:
tags:
- {name: doctrine.event_subscriber}
Создайте каталог EventListener в папке src и напишите своему слушателю вот так
<?php
namespace App\EventListener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Event\LifecycleEventArgs;
class EntityListener implements EventSubscriber
{
/**
* @var EntityManagerInterface $em
*/
private $em;
/**
* EntityListener constructor.
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof SomeEntity) {
//do somthing
}
}
/**
* {@inheritdoc}
*/
public function getSubscribedEvents()
{
return ['prePersist'];
}
}