使用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参与其中。
答案 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() ) );