2015-12-24 104 views
5

我有一个多表单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(); 
} 

回答

0

感谢您的回复!

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

两份答复内容:

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

第二:我用我的route-name(comment-add)指定动作评论帖子的路径。 {{ form_start(form_comment, {'attr': {'method' : 'post', 'action' : path('comment-add', {'post_id': post_id, 'groupe_id' : groupe_id})}}) }}

(对不起,因为我没有指定我使用了包含树枝视图的表单。)

1

如果我没有错误,问题来自getName()方法uniqid()
控制器中的名称与您的树枝不同,因此您的表单无效。

我想你想改变形式的名称有不同的ID在你看来,如果是这样的话,你可以把一个ID在你的形式是这样的:

{{ form_start(form_comment, {'attr': {'id' : uniqvalue}}) }} 

uniqvalue这可能是一个计数器

0

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