在我的symfony2应用程序中,我允许用户下载一些文件:
class FileController extends Controller
{
...
public function downloadFilesAction()
{
//This will serve a page listing all downloadable files and their url
}
public function downloadFileAction($file_id)
{
//This will be requested from the page served
//in the above "downloadFilesAction()"
try {
// Some processing goes here ...
}
catch (\Exception $e)
{
$this->get('session')->getFlashBag()->add('error', 'Error occurred');
return $this->forward('MyBundle:File:downloadFiles');
}
//get file content into &content variable
$headers = array(
'Content-Type' => 'text/csv;',
'Content-Disposition' => "attachment; filename*=UTF-8''downloadedfile.csv",
);
return new Response($content, 200, $headers);
}
}
让我们假设第一次出现错误并显示flash错误消息;第二次下载成功。问题出在第二个请求flash消息仍然停留在页面上。下载成功后如何摆脱flash消息?
答案 0 :(得分:0)
首先使用get('error')
内的downloadFileAction()
清除flashbag的现有消息。
请注意,使用FlashBag->clear()
会取消设置所有邮件(不需要)。
public function downloadFileAction($file_id)
{
$flashBag = $this->get('session')->getFlashBag();
$flashBag->get('error'); // clear the error message
try {
// ...
}
catch (\Exception $e)
{
$flashBag->add('error', 'Error occurred');
return $this->forward('MyBundle:File:downloadFiles');
}
// ...
答案 1 :(得分:0)
要重置闪存包,您可以重定向用户,而不是转发操作:
return $this->redirect($this->generateUrl('download_files_route'));