Symfon2「カスタマイズ編(4) 投稿日時・更新日時の自動挿入」

2011年12月13日 オフ 投稿者: KYO
Table of Contents

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上で確認する

【参考】

ref. カスタマイズ編(4) 投稿日時・更新日時の自動挿