2016-04-27 1 views
1

私はThe Bookに続いてSymfonyを学んでいます。このチュートリアルでは、(挿入時にcreatedAtフィールドを設定するために)prePersistイベントを正常に設定しました。ライフサイクルコールバックprePersistが発砲しない(YAMLファイルを使用)

今、私はアノテーションの代わりにYAMLファイルを使って同じことをしようとしています。ここに私のorm.ymlファイル:

AppBundle\Entity\Chronicle: 
    type: entity 
    table: chronicles 
    id: 
     id: 
      type: integer 
      generator: {strategy: AUTO} 
    fields: 
     name: 
      type: string 
      length: 256 
     createdAt: 
      type: datetime 

    manyToOne: 
     creator: 
      targetEntity: User 
      inversedBy: chronicles 
      joinColumn: 
       name: user_id 
       referencedColumnName: id 
     game: 
      targetEntity: Game 
      joinColumn: 
       name: game_id 
       referencedColumnName: id 

    oneToMany: 
     characters: 
      targetEntity: Character 
      mappedBy: chronicle 

    lifeCycleCallbacks: 
     prePersist: [ setCreatedAtValue ] 

そして、これは私のエンティティクラスの抜粋です:

class Chronicle 
{ 
    private $id; 

    private $name; 
    private $createdAt; 

    // Associations 
    private $game; 
    private $creator; 
    private $characters; 
    // TODO: users or user relationships 

    // Constructor 
    public function __construct(User $creator=null) { 
     $this->characters = new ArrayCollection(); 
     $this->creator = $creator; 
    } 

    /** 
    * Set createdAt at the current time. 
    * 
    * (Lifecycle callback) 
    */ 
    public function setCreatedAtValue() 
    { 
     $this->createdAt = new \DateTime(); 
    } 
    // ... 
} 

しかしsetCreatedAtValue()メソッドが呼び出されることはありません。したがって、オブジェクトを挿入しようとすると例外が発生します。

注釈を使用するとき、@ORM \ HasLifecycleCallbacks()注釈を使用してライフサイクルコールバックの存在を伝える必要があることに気がつきましたが、ymlのどこにも同じものが見つかりませんでした。

チュートリアルでは、services.ymlでコールバックを登録する必要があることがわかりましたが、このチュートリアルでは決して言及していません。

答えて

0

"lifeCycleCallbacks"を "lifecycleCallbacks"に変更すると呼び出されます。

関連する問題