多种形式包括symfony(同一页)

时间:2015-12-24 08:32:45

标签: php symfony

我遇到多个表格symfony(包含)的问题。

我在同一页面中有多篇文章,用户可以为每篇文章添加评论。我想在表单中添加评论。

我的问题是:当我提交我的评论添加表单时,Symfony不会将信息保存在数据库中(没有错误消息)。

我尝试添加一个类来更改表单的名称,但它是一样的。

我在控制器中的表单操作(通过每篇文章的树枝视图调用)

public function formAction($post_id, Request $request) {
    $user = $this->getUser();
    $em = $this->getDoctrine()->getManager();
    $post = $em->getRepository('AppBundle:Post')->find($post_id);

    $comment = new Comment();
    $comment -> setPost($post);
    $comment -> setAuthor($user);

    $form_comment = $this->createForm(CommentType::class, $comment);

    $form_comment->handleRequest($request);
    if ($form_comment->isSubmitted()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($comment);
        $em->flush();

        $request->getSession()->getFlashBag()->add('msg_success', 'Votre contribution a bien été ajoutée');

    }

    return $this->render('account/form-comment.html.twig', array(
      'form_comment' => $form_comment->createView(),
      'post_id' => $post_id
    ));

}

在表单类型中获取名称(对于唯一ID)

public function getName() {
    return self::NAME . '_' . uniqid();
}

3 个答案:

答案 0 :(得分:1)

如果我没有弄错的话,问题来自于使用getName()的{​​{1}}方法。
控制器中的名称与您的树枝不同,因此您的表单无效。

我想您要更改表单的名称以在视图中显示不同的ID,如果是这种情况,您可以在表单中添加如下ID:

uniqid()

{{ form_start(form_comment, {'attr': {'id' : uniqvalue}}) }} 可能是一个计数器

答案 1 :(得分:0)

最有可能的问题是在形成表单类型名称时使用uniqid()。你看,在第一次请求时,评论表单的名称是例如form_comment_567c0dff1b74a,当用户点击提交评论并将数据发布到服务器时,symfony将再次创建表单并将请求发布数据绑定到表单,这就是symfony表单工作,在这种情况下,表单名称将与我上面写的名称不同。因此,$form_comment->isSubmitted()将为false。您是否在不使用uniqid()的情况下尝试过?我很确定它可以简单地命名表单类型,通常是静态名称。

答案 2 :(得分:0)

感谢您的回复!

最后,问题不在这里。我在评论表单form-comment.html.twig中使用了特定的树枝视图(包含在索引中),但我没有指定特定的路径路径。

两个回复要素:

首先:我使用{{ render(url('comment-add')) }}代替render(controller("AppBundle:Default:method")来包含树枝视图。

第二:我使用我的路线名称(评论添加)指定行动评论帖的路径。 {{ form_start(form_comment, {'attr': {'method' : 'post', 'action' : path('comment-add', {'post_id': post_id, 'groupe_id' : groupe_id})}}) }}

(我很抱歉,因为我没有指定我使用包含twig视图的表单。)