初めて FOSUserBundle を symfony2 プロジェクトにインポートしましたが、ユーザー エンティティを拡張するときに問題に気づきました。prePersist および preUpdate ライフサイクル コールバックを使用して created_at および updated_at フィールドを追加しましたが、これらのメソッドは読み取られません。
これらのフィールドのセッターをコンストラクターに配置すると、フィールドにデータが入力されます (ただし、明らかにこれは updated_at では正しく機能しません)。追加した他のフィールドは期待どおりに機能しました。
ライフサイクル イベントが正しく機能するように、何らかの方法で UserListener を拡張する必要がありますか?
以下のコードを見つけてください。助けやアドバイスをいただければ幸いです。
ユーザーエンティティ:
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();
}
...