【问题标题】:Symfony2 checkbox form, alter date based on a checkboxSymfony2 复选框表单,根据复选框更改日期
【发布时间】:2012-01-23 07:07:16
【问题描述】:

出于测试目的,我使用 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

【问题讨论】:

  • 我希望我能帮助你,但我真的不明白这个问题。
  • 我可以创建一个表单并将其链接到数据库中的一个对象以修改数据字段。但我想制作一个复选框来更新对象。当此复选框打开并发送表单时,我想将对象的 date_return 更新为今天。这对你有帮助吗?

标签: forms validation symfony checkbox


【解决方案1】:

我不太明白你的问题,但我会尽力帮助你:

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

或者使用学说lifecycles

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

希望对你有帮助!

【讨论】:

    【解决方案2】:

    不用创建实体属性,你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2014-07-09
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多