0

画像をアップロードしましたが、次の 2 つのことが起こることに気付きました。

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()));
4

1 に答える 1

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"));
    }

これで2番目の問題も解決するかもしれませんが、Symfonyはキャッシュを使用して読み込みを高速化するため、よくわかりません。
しかし、実際にはこれは問題ではなく、画像をアップロードした後、ビューに読み込まれなかったのは、スレッド データの読み込み後にアップロード処理が行われたためです。

お役に立てれば

于 2013-07-02T07:00:29.947 に答える