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