form_widget提交不起作用

时间:2015-03-17 10:34:52

标签: php forms symfony twig

我正在尝试自定义使用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(),
    ));
}

当我提交表单时,会生成此网址

  

/web/app_dev.php/nastycodes?form [住客评论] = MYCOMMENT&安培;形式[保存] =

而不是这个

  

/web/app_dev.php/nastycodes?id=1

当我没有显示所有表格时,我不知道为什么我的提交不起作用。

你们知道问题是什么以及我如何解决它?

由于

2 个答案:

答案 0 :(得分:1)

不确定您使用的是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) ...

答案 1 :(得分:0)

尝试将method="post"添加到<form>代码,表单的默认方法是GET。

使用{{ form(comment) }}时,它会在模板中生成表单的所有字段。尝试在表单结束标记form_rest(comment)documentation)之前添加</form>,以确保您没有省略某些内容。