2012-01-23 1 views
1

Для тестовых целей я делаю онлайн-инструмент для онлайн-библиотеки с Symfony2.Symfony2 checkbox form, изменить дату на основе флажка

У меня есть объект 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); 
    }); 
Смежные вопросы