1

次のような状況があります: 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 を拡張するオブジェクトでこれらの関数を呼び出す方法です。

4

1 に答える 1