Symfon2「カスタマイズ編(4) 投稿日時・更新日時の自動挿入」
2011年12月13日Symfon2「カスタマイズ編(4) 投稿日時・更新日時の自動挿入」
ライフサイクル・コールバック機能の利用
【ライフサイクル・コールバックとは】
ライフサイクル・コールバックとは、データの挿入・更新・削除の前後に特別な処理を定義できる機能のこと
ライフサイクル・コールバックには、以下のようなものがある
- PreRemove
- PostRemove
- PrePersist
- PostPersist
- PreUpdate
- PostUpdate
- PostLoad
- LoadClassMetadata
【ライフサイクル・コールバックの埋め込み】
Post.phpにライフサイクル・コールバックを埋め込みます
$ vim src/My/BlogBundle/Entity/Post.php
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Post
{
// …/** * set values bedore persist * * @ORM\PrePersist */ public function prePersist() { $this->createdAt = new \DateTime(); $this->updatedAt = new \DateTime(); } /** * set values bedore update * * @ORM\PreUpdate */ public function preUpdate() { $this->updatedAt = new \DateTime(); } // ...
}
DefaultController.phpから、newAction()とeditAction()の中で投稿日時と更新日時の設定を削除
$ vim src/My/BlogBundle/Controller/DefaultController.php
public function newAction()
{
// …
// $post->setCreatedAt(new \DateTime());
// $post->setUpdatedAt(new \DateTime());
// …
}public function editAction($id)
{
// …
// $post->setUpdatedAt(new \DateTime());
}
【ブラウザで確認】
表向きの動作は変わらないが、更新日時、投稿日時が正確に保存されていることをDB上で確認する