Problema di callback del ciclo di vita durante l'estensione di entity framework; utente FOSUserBundle

Ho appena importto FOSUserBundle per la prima volta in un progetto symfony2 e ho notato un problema durante l'estensione dell'entity framework; utente. Ho aggiunto i campi created_at e updated_at con callback prePersist e preUpdate del ciclo di vita, ma questi methods non vengono letti.

Se metto setter per questi campi nel constructor, i campi vengono popolati (ma ovviamente questo non funziona correttamente con updated_at). Gli altri campi che ho aggiunto hanno funzionato come previsto.

È necessario estendere UserListener in qualche modo per consentire il corretto funzionamento degli events del ciclo di vita?

Si prega di trovare il mio codice qui sotto, qualsiasi aiuto o consiglio sarebbe molto apprezzato.

UserEntity:

namespace Acme\UserExtensionBundle\Entity; use FOS\UserBundle\Entity\User as BaseUser; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * Acme\UserExtensionBundle\Entity\User * * @ORM\Table(name="acme_user") * @ORM\Entity() * @ORM\HasLifecycleCallbacks() */ class User extends BaseUser{ /** * @var integer $id * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var datetime $created_at * @ORM\Column(name="created_at", type="datetime") */ protected $created_at; /** * @var datetime $updated_at * @ORM\Column(name="updated_at", type="datetime") */ protected $updated_at; ... public function __construct() { parent::__construct(); $this->created_at = new \DateTime; $this->updated_at = new \DateTime; } /* * @ORM\preUpdate */ public function setUpdatedTimestamp(){ $this->updated_at = new \DateTime(); } ... 

Dopo una rapida occhiata, posso solo individuare un piccolo errore nel caso del nome Annotations.

Dovrebbe essere

 @ORM\PreUpdate 

e non

 @ORM\preUpdate 

quale IMHO dovrebbe portre ad un errore quando eseguito.

Ad each modo suggerirei di usare DoctrineExtensionsBundle descritto in http://symfony.com/doc/current/cookbook/doctrine/common_extensions.html .

Viene fornito con un comportmento temporizzato (e molti più utili), quindi non è necessario codificarlo da solo (reinventare la ruota).

Lo sto usando insieme a FOSUserBundle e funziona perfettamente. Ecco come appare la mia definizione nell'entity framework; utente:

  /** * @var \DateTime $created * * @Gedmo\Timeprintingble(on="create") * @ORM\Column(type="datetime") */ protected $created; /** * @var \DateTime $updated * * @Gedmo\Timeprintingble(on="update") * @ORM\Column(type="datetime") */ protected $updated;