簡體   English   中英

提交后和重新提交刷新表單后,圖像未顯示,symfony2

[英]Image does not show after submission and on refresh form resubmits, 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()));

刷新后重新提交是默認行為,因為刷新將發出與上次相同的請求。 為了克服這個問題,您可能需要一種稱為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使用緩存來加快加載速度。
但這實際上不是問題,而是上載圖像后沒有將其加載到視圖中,因為上載處理是在加載線程數據之后發生的。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM