2013-07-02 34 views
0

我有一個圖片上傳,只注意到的是兩件事情:圖片沒有顯示提交後並在刷新的形式重新提交,Symfony2的

1)形式重新提交上刷新。顯然不希望那樣。我找到了一個平坦的PHP答案。我想知道做什麼symfony的方式。

2)我上傳我必須刷新看到圖像文件後,這就是我如何發現問題1.

控制器代碼:

public function displayThreadAction($thread_Id) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $thread = $em->getRepository('GreenMonkeyDevGlassShopBundle:ForumThread')->find($thread_Id); 
    $post = new ForumReply(); 
    $post->setThreadId($thread); 
    $form = $this->createForm(new ReplyImageForm(), $post); 
    $request = $this->getRequest(); 


    if ($request->isMethod('POST')){ 

     $form->bind($request); 

     if ($form->isValid()){ 
      $image = new ForumReplyImage(); 
      $image->setImageName($form['imageName']->getData()); 
      $image->setImageFile($form['imageFile']->getData()); 
      $image->upload(); 

      $image->setReplyId($post); 

      $em->persist($post); 
      $em->persist($image); 
      $em->flush(); 
      $post = new ForumReply(); 
      $post->setThreadId($thread); 
      $form = $this->createForm(new ReplyImageForm(), $post); 
     } 
    } 

    return $this->render('GreenMonkeyDevGlassShopBundle:Forum:forum_thread.html.twig', array('thread' => $thread, 'form' => $form->createView())); 

回答

1

重新提交上刷新是默認行爲,因爲刷新將發出您最後一次的相同請求。爲了克服這個問題,你可能需要一個名爲PRG的機制。不幸的是Symfony沒有內置插件。但是,您可以通過重定向到相同的路線來實現此目的。

例如,

if ($request->isMethod('POST')){  
     $form->bind($request);  
     if ($form->isValid()){ 
      $image = new ForumReplyImage(); 
      $image->setImageName($form['imageName']->getData()); 
      $image->setImageFile($form['imageFile']->getData()); 
      $image->upload(); 

      $image->setReplyId($post); 

      $em->persist($post); 
      $em->persist($image); 
      $em->flush(); 
      $post = new ForumReply(); 
      $post->setThreadId($thread); 
      $form = $this->createForm(new ReplyImageForm(), $post); 
     } 
     return $this->redirect($this->generateUrl("current_route")); 
    } 

這也許可以解決你的第二個問題,但是我不確定,因爲Symfony使用緩存來加載速度更快。
但實際上這並不是問題,因爲上傳處理是在加載線程數據之後發生的,因爲上載處理髮生在您上載沒有加載到視圖的圖像之後。

希望這有助於