form_widget 提交无效
form_widget submit doesn't work
我正在尝试自定义使用 formBuilder 创建的表单。
当我使用 {{ form(comment) }}
显示时,我的表单运行良好,但不再使用 {{ form_widget(comment.MYMETHOD) }}
我这样显示我的表格:
<form class="commentForm">
<ul>
<li class="commentFormArea">{{ form_widget(comment.commentaires) }}
</li>
<li class="commentFormsubmit">{{ form_widget(comment.save) }}</li>
</ul>
</form>
我的控制器
public function postsAction(Request $request)
{
$repository = $this
->getDoctrine()
->getManager()
->getRepository('NastycodeFrontBundle:Publication')
;
$posts = $repository->findBy(array(), array(), 10);
$commentaires = new Commentaires();
$comment = $this->get('form.factory')->createBuilder('form', $commentaires)
->add('commentaires', 'textarea')
->add('save', 'submit')
->getForm()
;
// On fait le lien Requête <-> Formulaire
// À partir de maintenant, la variable $commentaires contient les valeurs entrées dans le formulaire par le visiteur
$comment->handleRequest($request);
// On vérifie que les valeurs entrées sont correctes
// (Nous verrons la validation des objets en détail dans le prochain chapitre)
if ($comment->isValid()) {
// On l'enregistre notre objet $commentaires dans la base de données, par exemple
$em = $this->getDoctrine()->getManager();
$em->persist($commentaires);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');
// On redirige vers la page de visualisation de l'annonce nouvellement créée
return $this->redirect($this->generateUrl('nastycode_comment_code', array('id' => $commentaires->getId())));
}
$user = $this->getUser();
return $this->render('NastycodeFrontBundle:Posts:posts.html.twig', array(
'user' => $user,
'posts' => $posts,
'comment' => $comment->createView(),
));
}
当我提交我的表单时,它会生成这个 url
/web/app_dev.php/nastycodes?form[commentaires]=MYCOMMENT&form[save]=
而不是这个
/web/app_dev.php/nastycodes?id=1
我不知道为什么当我没有显示所有表单时我的提交不起作用。
你们知道问题出在哪里吗?我该如何解决?
谢谢
尝试在<form>
标签中加入method="post"
,form默认方法是GET。
当您使用 {{ form(comment) }}
时,它会生成模板中表单的所有字段。尝试在表单结束标记 </form>
(documentation) 之前添加 form_rest(comment)
以确保您没有遗漏任何内容。
不确定您使用的 Symfony2
是哪个版本,但是由于 v2.3
有 form_start()
和 form_end()
Twig
函数可用于打印表单打开和表单关闭标签,包括其属性。
但是,您需要这样做:
$comment = $this->get('form.factory')->createBuilder('form', $commentaires)
->setMethod("POST") // <--- THIS
->add('commentaires', 'textarea')
->add('save', 'submit')
->getForm()
;
然后:
{{ form_start(comment) }}
<ul>
<li class="commentFormArea">{{ form_widget(comment.commentaires) }}
</li>
<li class="commentFormsubmit">{{ form_widget(comment.save) }}</li>
</ul>
{{ form_end(comment) }}
默认情况下,form_end
自动调用 form_rest(form)
...
我正在尝试自定义使用 formBuilder 创建的表单。
当我使用 {{ form(comment) }}
显示时,我的表单运行良好,但不再使用 {{ form_widget(comment.MYMETHOD) }}
我这样显示我的表格:
<form class="commentForm">
<ul>
<li class="commentFormArea">{{ form_widget(comment.commentaires) }}
</li>
<li class="commentFormsubmit">{{ form_widget(comment.save) }}</li>
</ul>
</form>
我的控制器
public function postsAction(Request $request)
{
$repository = $this
->getDoctrine()
->getManager()
->getRepository('NastycodeFrontBundle:Publication')
;
$posts = $repository->findBy(array(), array(), 10);
$commentaires = new Commentaires();
$comment = $this->get('form.factory')->createBuilder('form', $commentaires)
->add('commentaires', 'textarea')
->add('save', 'submit')
->getForm()
;
// On fait le lien Requête <-> Formulaire
// À partir de maintenant, la variable $commentaires contient les valeurs entrées dans le formulaire par le visiteur
$comment->handleRequest($request);
// On vérifie que les valeurs entrées sont correctes
// (Nous verrons la validation des objets en détail dans le prochain chapitre)
if ($comment->isValid()) {
// On l'enregistre notre objet $commentaires dans la base de données, par exemple
$em = $this->getDoctrine()->getManager();
$em->persist($commentaires);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');
// On redirige vers la page de visualisation de l'annonce nouvellement créée
return $this->redirect($this->generateUrl('nastycode_comment_code', array('id' => $commentaires->getId())));
}
$user = $this->getUser();
return $this->render('NastycodeFrontBundle:Posts:posts.html.twig', array(
'user' => $user,
'posts' => $posts,
'comment' => $comment->createView(),
));
}
当我提交我的表单时,它会生成这个 url
/web/app_dev.php/nastycodes?form[commentaires]=MYCOMMENT&form[save]=
而不是这个
/web/app_dev.php/nastycodes?id=1
我不知道为什么当我没有显示所有表单时我的提交不起作用。
你们知道问题出在哪里吗?我该如何解决?
谢谢
尝试在<form>
标签中加入method="post"
,form默认方法是GET。
当您使用 {{ form(comment) }}
时,它会生成模板中表单的所有字段。尝试在表单结束标记 </form>
(documentation) 之前添加 form_rest(comment)
以确保您没有遗漏任何内容。
不确定您使用的 Symfony2
是哪个版本,但是由于 v2.3
有 form_start()
和 form_end()
Twig
函数可用于打印表单打开和表单关闭标签,包括其属性。
但是,您需要这样做:
$comment = $this->get('form.factory')->createBuilder('form', $commentaires)
->setMethod("POST") // <--- THIS
->add('commentaires', 'textarea')
->add('save', 'submit')
->getForm()
;
然后:
{{ form_start(comment) }}
<ul>
<li class="commentFormArea">{{ form_widget(comment.commentaires) }}
</li>
<li class="commentFormsubmit">{{ form_widget(comment.save) }}</li>
</ul>
{{ form_end(comment) }}
默认情况下,form_end
自动调用 form_rest(form)
...