我有一个问题。我正在使用Laravel构建一个应用程序,在我上传图片的页面上,我需要一条闪存成功消息,说明您已成功上传新图片。当我上传,它工作,显示Flash消息,但当我刷新,或我转到其他页面时,消息仍然保留在那里。然后在另一次刷新后它消失了。在其他页面上,例如创建新帖子,flash消息可以正常工作,而无需在刷新或转到其他页面后显示。我使用imageintervention.io api上传图片,我提到它是因为我不想让你对代码感到困惑。
public function update_avatar(Request $request)
{
// Handle the upload of avatar
if ($request->hasFile('avatar'))
{
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename ) );
$user = Auth::user();
$user->avatar = $filename;
$user->save();
Session::flash('success', 'You have successfully uploaded new picture!');
}
return view('pages.profile', array('user' => Auth::user()) );
}
答案 0 :(得分:12)
您不应该在执行此操作后返回视图。您应该返回一个重定向到GET路由,在那里您将显示该视图(view - pages.profile)。这是POST重定向GET流程。
闪烁数据仅在NEXT请求中可用。您正在显示视图的同一请求中闪烁。这就是为什么刷新然后显示flash消息,因为刷新导致新请求,这是下一个请求。
你真的不应该使用单一方法进行表单处理和显示视图,因为它会导致混乱。
有一个方法可以执行重定向到显示视图的路径的处理。您可以同时闪烁和重定向。
return redirect()->route(...)->with('success', ....);