2012-01-23 13 views
1

私はsymfony2でライトライブラリのオンラインツールを作成します。Symfony2チェックボックスフォーム、チェックボックスに基づいて日付を変更

私は他のエンティティにリンクするBorrowエンティティを持っています。あるユーザーが借りた本の返品を確認するためのフォームを作成したいと思います。

返されていない書籍に対応するすべてのBorrow録音を収集しました。

今、ユーザーが返す書籍を検証するためのチェックボックスリストを含むフォームを作成します。 その後、次のようなものを作ることができます(これは問題ではありません)。

if ($this->getRequest()->getMethod() == 'POST') 
{ 
    $form->bindRequest($this->getRequest()); 

    if ($form->isValid()) 
    { 
     $obj_list = $form->getData(); 
     foreach ($obj_list as $obj) 
     { 
       $obj->setBorrowEndDate(...); // Today's datetime 

       $em = $this->getDoctrine()->getEntityManager(); 
       $em->persist($obj); 
       $em->flush(); 
     } 
     return $this->redirect($this->generateUrl('index')); 
    } 
    else 
    { 
     $args['problem']=$form->errors(); 
    } 
} 
// Continuation : creation of the form 
+0

私はあなたを助けることがしたいが、私は実際に質問を理解していません。 –

+0

フォームを作成し、それをデータベースのオブジェクトにリンクしてデータフィールドを変更することができます。しかし、オブジェクトを更新するためのチェックボックスを作っています。このチェックボックスがオンで、フォームが送信されると、オブジェクトのdate_returnを今日に更新します。これはあなたを助けますか? – Creasixtine

答えて

0

私は本当にあなたの問題を理解していないが、私はあなたをお手伝いします:

1)は、例えば、「チェック」と呼ばれる(借りる)エンティティにクラス属性を作成します。お使いのデータベースに依存していません。

private $check; 

public function setCheck($check) 
{ 
    $this->check = $check; 
} 

public function getCheck() 
{ 
    return $this->check; 
} 

2)チェックボックス入力としてあなたのクラスフォームで、それを追加します。

$builder->add('check', 'checkbox') 

3)次に、あなたが持っている2つのソリューション:

更新このようなそのセッター:

public function setCheck($check) 
{ 
    $this->check = $check; 

    // Update borrow endtime 
    if ($this->check === true && !$this->getBorrowEndDate()) { 
     $this->setBorrowEndDate(new \DateTime()); 
    } 
} 

または使用の法理lifecycles

/** 
    * Called before persisting your entity 
    * 
    * @ORM\prePersist 
    */ 
public function prePersist() 
{ 
    // Update borrow endtime 
    if ($this->check === true && !$this->getBorrowEndDate()) { 
     $this->setBorrowEndDate(new \DateTime()); 
    } 
} 

・ホープこれはあなたを助けます!

0

代わりにエンティティ属性を作成するのではなく、あなたがこのような方法でそれを行うことができます。

$builder->add('check', 'checkbox', [ 
     'mapped' => false 
    ]); 


    $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) 
    { 
     $form = $event->getForm(); 
     $object = $event->getData(); 

     if($form->get('check')->getData() && !$object->getBorrowEndDate()) { 
      $object->setBorrowEndDate(new \DateTime()); 
     } 

     $event->setData($object); 
    }); 
関連する問題