次のような状況があります: DataObject クラスを拡張する (Doctrine Entity) ContentCategory。DataObject クラスには、次の関数 onPrePersist があります。
/**
* @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
...
/** @ORM\PrePersist */
public function onPrePersist()
{
//using Doctrine DateTime here
$this->creation_date = new \DateTime('now');
}
ContentCategory クラスにもこの関数が必要です。この関数を ContentCategory クラスに入れると、問題なく動作します。ContentCategory クラスが同じ関数 onPrePersist() をクラス自体で定義せずに使用できる方法はありますか?
* @ORM\HasLifecycleCallbacks()
*/
class ContentCategory extends DataObject implements InputFilterAwareInterface
{
...
}
オブジェクトに onPrePersist 関数を与える理由は、このオブジェクトが作成されたときに DateTime を設定するか、DataObject クラスを拡張している他のオブジェクト/エンティティを設定するためです。
--<編集>--
現在、次のように ContentCategory にコンストラクト メソッドを追加しました。
public function __construct() {
parent::onPrePersist();
}
このようにして、Doctrine は新しいエンティティが作成されたときに関数 onPersist を実行します。もう 1 つのケースは、Doctrine を使用してエンティティが更新されている場合です。Modified_date を設定したいと思います。その場合、DataObject クラスにこのような関数があります。
/**
* @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
...
/**
* @ORM\PreUpdate
*/
public function onUpdate()
{
$this->last_modified_date = new \DateTime('now');
}
追加された Doctrine ORM Annotation (PreUpdate) は、関数 (上記) がオブジェクトの update ステートメントで実行されることを確認します。問題は、DataObject を拡張するオブジェクトでこれらの関数を呼び出す方法です。