2015-12-24 65 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()?我非常確定,它可以像通常的靜態名稱一樣簡單地命名錶單類型。