Symfony2:关于表单和验证的问题

时间:2013-12-05 04:22:48

标签: validation symfony

我有多级用户注册,我似乎错过了一些东西。

我有一个用户实体和一些其他数据嵌入我希望收集的表格中。为了举例,我们会说User有姓名和电子邮件,这些映射到用户实体上的字段。在同一表格中,我还将设备数据作为隐藏字段。

在我的用户实体上,我有一个验证组'计划',所以当我提交时,我会做这样的事情:

<?php
$user = new User();
$form = $this->createFormBuilder($user, array('validation_groups' => array('plan'))
    ->add('name')
    ->add('email')
    ->getForm();

$form->handleRequest($request)
if ($form->isValid()) {
    $user = $form->getData();
    $em->persist($user);
    $em->flush();
} else {
    return $this->render('myform.html.twig', array('form' => $form->createView()));
}

这主要是粗略的伪代码,但现在当我调用$ form-&gt; getData()或$ request-&gt; request-&gt; all()时,device_data被删除,无法找到。我可以通过不将$ user作为第一个参数传递给createFormBuilder来解决这个问题,但是我的验证组似乎没有发生,因为它绑定到用户实体。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

所以看起来问题并不像我说的那样,我事先知道的正确解决方案是 - &gt; add('fieldname',null,array('mapped'=&gt; false)),但是由于实现细节和使用DomCrawler,这对我不起作用。

然后,您可以通过请求对象访问未映射的字段。

$request->request->get('form[fieldname]')

答案 1 :(得分:1)

安德鲁的答案很好,但如果你想进行“直接验证”(通过$form->isValid()方法)你宁愿使用这样的东西

$form = $this->createFormBuilder($user, array('validation_groups' => array('plan'))
               ->add('name')
               ->add('email')
               ->add('agree','checkbox', array('mapped' => false, 'constraints' => array(new NotBlank()))
               ->getForm();

例如,agree字段,这是一个复选框,您必须检查“接受条款和条件”才能继续。

mapped => false告诉createFormBuilder不要将该字段与实体字段相关联,因为它不会出现