刷新后显示的Laravel flash消息

时间:2016-06-13 23:32:44

标签: php twitter-bootstrap laravel laravel-5 flash-message

我有一个问题。我正在使用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()) );

}

1 个答案:

答案 0 :(得分:12)

您不应该在执行此操作后返回视图。您应该返回一个重定向到GET路由,在那里您将显示该视图(view - pages.profile)。这是POST重定向GET流程。

闪烁数据仅在NEXT请求中可用。您正在显示视图的同一请求中闪烁。这就是为什么刷新然后显示flash消息,因为刷新导致新请求,这是下一个请求。

你真的不应该使用单一方法进行表单处理和显示视图,因为它会导致混乱。

有一个方法可以执行重定向到显示视图的路径的处理。您可以同时闪烁和重定向。

return redirect()->route(...)->with('success', ....);