Форма флажка Symfony2, изменить дату на основе флажка - PullRequest
1 голос
/ 23 января 2012

В целях тестирования я создаю легкую библиотеку онлайн-инструмента с 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

Ответы [ 2 ]

0 голосов
/ 22 февраля 2016

вместо создания атрибута сущности, вы можете сделать это следующим образом:

    $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);
    });
0 голосов
/ 24 января 2012

Я не совсем понимаю вашу проблему, но постараюсь вам помочь:

1) Создайте атрибут класса в вашей сущности (займе), например, с именем «check», который не зависит от ваших баз данных:

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());
    }
}

Или использовать учение жизненные циклы :

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

Надеюсь, это поможет вам!

...