私は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でコールバックを登録する必要があることがわかりましたが、このチュートリアルでは決して言及していません。