Php 提交后和刷新表单重新提交时,图像不显示,symfony2
我上传了一张图片,刚刚注意到发生了两件事: 1) 表单在刷新时重新提交。显然我不想那样。我只找到了一个简单的PHP答案。我想知道symfony的做法是什么 2) 上传文件后,我必须刷新才能看到该图像,这就是我注意到问题1的原因 控制器代码:Php 提交后和刷新表单重新提交时,图像不显示,symfony2,php,image,forms,symfony,upload,Php,Image,Forms,Symfony,Upload,我上传了一张图片,刚刚注意到发生了两件事: 1) 表单在刷新时重新提交。显然我不想那样。我只找到了一个简单的PHP答案。我想知道symfony的做法是什么 2) 上传文件后,我必须刷新才能看到该图像,这就是我注意到问题1的原因 控制器代码: public function displayThreadAction($thread_Id) { $em = $this->getDoctrine()->getManager(); $thread = $em->get
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()));
刷新时重新提交是默认行为,因为刷新将发出与上次相同的请求。要克服这个问题,您可能需要一个名为的机制。不幸的是,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使用缓存来加快加载速度。但实际上这并不是问题所在,问题是,在上传图像后,您没有加载到视图中,因为上传处理发生在加载线程数据之后 希望这有帮助