2012-01-23 102 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); 
    });