2016-03-22 6 views
3

TimestampableListenerが$this->createdAtの適切な値を設定する機会を持って前に私は、Entityプロパティが@Timestampableによって設定される前に@PrePersistでアノテートされたメソッドを実行する方法を教えてください。

残念ながら
class Foo{ 
    /** 
    * @var \DateTime 
    * @Gedmo\Timestampable(on="create") 
    * @ORM\Column(type="datetimetz") 
    */ 
    private $createdAt; 

    /** 
    * @ORM\PrePersist 
    */ 
    public function bar() 
    { 
     $this->createdAt->getTimestamp(); 
    } 
} 

は、Fooの::バー()が実行されています。

サービスリスナーの優先度をservices.yml(Can I define the order in which event listeners/subscribers are called in doctrine?)に変更しようとしていましたが、動作しません。あなたが教義のListenersInvoker

+0

@chalasr:これは初めてのことですが、投稿を編集する理由は何ですか? timestamptzは正しいタイプでした。 – Zibi

+0

本当に申し訳ありませんが、私は間違いだと信じていました!私がこのタイプを見るのは初めてです。 – chalasr

+0

@chalasr、それは問題ありません。 :) – Zibi

答えて

1

を見ることができるようにLifecycleCallbacksEntityListeners前に呼び出され、そのTimestampableListenerはPrePersist注釈の前に実行されることはありません。

prePersistイベントをリッスンする独自のEntityListenerを作成し、barメソッドを呼び出して、優先順位を使用して順序を変更できます。 createdAtを定義する場合は、Timestampableの使用を避けて、コンストラクタでcreatedAtの値を手動で設定することができます。

+0

EntityListenerが仕事をしました。 – Zibi

関連する問題