3

初めて 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();
  }

  ...
4

1 に答える 1

2

ざっと見てみると、Annotations の名前の大文字と小文字にわずかな誤りしか見つかりません。

そのはず

@ORM\PreUpdate

それ以外の

@ORM\preUpdate

私見が実行時にエラーにつながるはずです。

とにかく、http://symfony.com/doc/current/cookbook/doctrine/common_extensions.htmlで説明されている DoctrineExtensionsBundle を使用することをお勧めします。

Timestampable (およびその他の多くの便利な) 動作が付属しているため、これを独自にコーディングする必要はありません (車輪の再発明)。

FOSUserBundle と一緒に使用していますが、問題なく動作します。これは、ユーザーエンティティでの私の定義がどのように見えるかです:

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

/**
 * @var \DateTime  $updated
 *
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(type="datetime")
 */
protected $updated;
于 2012-05-21T11:31:13.953 に答える