으로Gedmo Timestampable 주석, 이벤트 리스너 그래서
을 작업 표시되지 않습니다 나는 기업은 그래서 같은 Timestampable 필드로 설정이 : 다음에 대한 라이프 사이클 가입자를 설정 한
<?php
namespace Acme\Bundle\Entity;
use Acme\PathEnumerableInterface as EnumerableInterface;
use Acme\PathEnumerable as PathEnumerableTrait;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* SomeEntity
*
* @ORM\Table()
* @ORM\HasLifecycleCallbacks
*/
class SomeEntity implements EnumerableInterface
{
use PathEnumerableTrait;
/**
* @var \DateTime
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
}
postPersist, postUpdate 및 postFlush 이벤트. service.yml은 다음과 같습니다
services:
acme.element_listener:
class: %iacme.element_listener.class%
arguments:
manager: "@doctrine.orm.default_entity_manager"
tags:
- { name: doctrine.event_subscriber, connection: default }
실제 리스너는 다음과 같습니다
<?php
namespace Acme\Bundle\EventListener;
use Acme\PathEnumerableInterface;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Event\PostFlushEventArgs;
class EventListener
{
/**
* @var Doctrine\ORM\EntityManager
*/
private $entityManager;
/**
* @var array
*/
private $paths = [];
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function getSubscribedEvents()
{
return ['postPersist'];
}
private function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// Set $newPath to a generated path and check so we don't end up in an infinite loop
if ($entity->getPath() != $newPath) {
//... Do some stuff with the entity
$this->entityManager->persist($entity);
$this->entityManager->flush();
}
}
}
내가 이벤트 리스너를 제거하면 모든 것이 잘하고 timestampable 필드가 올바르게 채워집니다. 그러나 리스너를 사용하여 새 엔티티를 만들면 타임 스탬프 가능 필드가 채워지지 않습니다.
제 질문은 이벤트 리스너가 Gedmo에서 타임 스탬프 필드를 채우지 않게하는 원인은 무엇입니까? 아마 정말 어리석은 일을하고 있어요,하지만 아직 그게 될 일을 볼 수 없습니다 ...