0

コメントを含むエンティティがあります。とてもシンプルな構造です

sent_at | DateTime
comment_author | Text
comment_text | Text
approved_at | DateTime (null when the comments is inserted)

Sonata をセットアップして、コメントを管理できるようになりました。

「編集」ページには、フィールドの日付と時刻を設定するためのドロップダウンのグループがあります。「編集」ページにapproved_at、チェックボックスをオンにすると、現在の日付と時刻を保存するチェックボックスが必要です。approved_at

これどうやってするの ?

4

1 に答える 1

1

SonataAdminBundle は 3 を提供しますSaving hooks。ドキュメントから直接:

new object : prePersist($object) / postPersist($object)
edited object : preUpdate($object) / postUpdate($object)
deleted object : preRemove($object) / postRemove($object)

だから、あなたが興味を持っているのはpreUpdate()

目的を達成するにはnon-mapped、フォームに新しいフィールドを追加する必要があります。

 // This is needed to check the checkbox if the message has been already approved
 $approved = false;

 $review = $this->getSubject();

 if ($review->getApprovedAt()) {
    $approved = true;
 }

 [..]

 $builder->add('approve', 'checkbox',
     array(
          // We don't need this as property in our entity.
          'mapped' => false,
          // The field should not be required, so that you can skip approving specific comment at the time
          'required' => false,
          'data' => $approved
     )
 );

あとは、更新時に値を読み取り、チェックされている場合は日時を設定するだけです。

 public function preUpdate($object) {
      /* @var $isApproved boolean */
      $isApproved = $this->getForm()->get('approve')->getData();

      if( $isApproved ) {
          $object->setApprovedAt( new \DateTime('now') );
      }
 }

そして、これでうまくいくはずです。ドキュメントの章 -ここ。

于 2015-06-03T12:02:13.623 に答える