提交前验证表单

时间:2015-06-22 15:23:12

标签: php validation symfony form-submit

使用Symfony,2.3及更新版本,我希望用户点击链接转到已存在实体的版本页面,并显示已经过验证的表单,每个错误都与其关联相应的领域,即我想要的 在提交表单之前要验证的表单。

我关注this entry of the cookbook

$form = $this->container->get('form.factory')->create(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group'));
$form->submit($request->request->get($form->getName()));
if ($form->isValid()) {
    ...
}

但是表单没有填充实体数据:所有字段都是空的。我尝试将$request->request->get($form->getName())替换为$myEntity,但它触发了一个异常:

$ myEntity不能用作Symfony / Component / Form / Extension / Csrf / EventListener / CsrfValidationListener.php中的数组

有没有人知道使用格式正确的数据提供提交方法的方法,以便实现我的目标?注意:我不想让Javascript参与其中。

2 个答案:

答案 0 :(得分:2)

取代:

$form->submit($request->request->get($form->getName()));

尝试:

$form->submit(array(), false);

答案 1 :(得分:1)

您需要将请求绑定到表单,以便使用以下内容填充表单中的提交值:$form->bind($request);

以下是您的代码应该是什么样子的详细说明:

//Create the form (you can directly use the method createForm() in your controller, it's a shortcut to $this->get('form.factory')->create() )
$form = $this->createForm(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group'));

// Perform validation if post has been submitted (i.e. detection of HTTP POST method)
if($request->isMethod('POST')){

    // Bind the request to the form
    $form->bind($request);

    // Check if form is valid
    if($form->isValid()){

        // ... do your magic ...

    }

}

// Generate your page with the form inside
return $this->render('YourBundle:yourview.html.twig', array('form' => $form->createView() ) );