2016-05-04 9 views
0

私はPostエンティティとPostTypeを持っています。Symfony - フォームイベント - 新しいデータと古いデータを取得する

投稿エンティティにはフィールド$requireModerationがあります。これは誰かがこの投稿をチェックし、公開する前に承認する必要があることを意味します。

私が投稿を編集しているとき、古い投稿値と新しい投稿値を比較したいと思います。値が変更された場合は、requireModerationフラグをtrueに変更したいと考えています。

フォームイベントを介して行うことはできますか?
このような何か:

public function postSubmit(FormEvent $event) 
{ 
    $newPost = $event->getData(); 
    $newContent = $post->getContent(); // return new contant of post 
    $oldPost = ... // here I want to get old post 
    $oldContent = $oldPost->getContent(); 

    if($newContent != $oldContent) { 
     // ... 
    } 
} 

しかし残念ながら、私は唯一の新しい、ちょうどFormEventオブジェクトを介してデータを送信されますすることができます。

+0

フォームフィールドを事前に入力して新しいものと古いものを比較するために使用するエンティティオブジェクトを追跡する必要があります。新しいデータを投稿すると、フォームイベントは以前のデータのレコードを持ちません。 – LMS94

答えて

0

Formイベントの代わりにDoctrineのライフサイクルイベントとUnitOfWorkを使用する必要があります(プロジェクトでDoctrineを使用することを前提としています)。

は、あなたのPostエンティティにpreUpdateリスナーを追加し、ような何か:あなたはそれらの古いものと新しい値で現在のリクエストの際に$entityに変更されたフィールドのリストを持っています$changeset変数で

$uow = $em->getUnitOfWork(); 
$changeset = $uow->getEntityChangeSet($entity); 

を。

+0

Mhm。そして 'requireModeration'を変更した場合、どうすればそれを自分のエンティティに戻すことができますか? –

+0

$ entity-> setRequireModeration(true)を呼び出すだけです。リスナーで –

0
public function postSubmit(FormEvent $event) 
{ 
    $newPost = $event->getData(); 
    $newContent = $newPost->getContent(); 
    $uow = $this->em->getUnitOfWork(); 
    $oldPost = $uow->getOriginalEntityData($post); 
    $oldContent = $OriginalEntityData["content"]; 

    if($newContent != $oldContent) { 
     // ... 
    } 
} 
関連する問題