出于测试目的,我使用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)
我真的不明白你的问题,但我会尽力帮助你:
1)在您的实体(借阅)中创建一个名为“check”的类属性,例如,这取决于您的数据库:
private $check;
public function setCheck($check)
{
$this->check = $check;
}
public function getCheck()
{
return $this->check;
}
2)将其作为复选框输入添加到您的班级表单中。
$builder->add('check', 'checkbox')
3)然后,你有2个解决方案:
像这样更新它的setter:
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());
}
}
希望这能帮到你!
答案 1 :(得分: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);
});