[英]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.