Laravel 4:页面刷新时不会消失会话Flash消息

时间:2014-06-16 11:54:46

标签: php flash session laravel-4 message

我使用相同的方法来获取和发布登录身份验证请求,如

public function login()
{
    if (Request::isMethod('post')){
        // Getting credentials
        $username = Input::get('username');
        $password = Input::get('password');
        // Authenticating super admin
        if(Auth::attempt(array('email'=>$username,'password'=>$password,'sysadmin'=>1))){

            return Redirect::To('superadmin');
        }else{
            Session::flash('message', 'Invalid Credentials !'); 
            return View::make('superadmin::login');         
        }           
    }else{
        echo View::make('superadmin::login');
    }
}

这是显示错误消息的登录视图代码:

@if(Session::has('message'))
    <div class="alert-box message">
        <h2>{{ Session::get('message') }}</h2>
    </div>
@endif

问题是当我在登录时输入无效凭据时,表单上会显示错误消息,但在手动刷新登录页面之后,会话消息不会消失。在第二次页面刷新时,会话消息消失。

我知道这种情况正在发生,因为URL(引用者)在我的情况下保持相同,因为同样的方法“login”用于两种类型的请求(get和post)。

在这种情况下显示错误消息的最佳方法是什么,以便在页面刷新或自动消息消失。

3 个答案:

答案 0 :(得分:3)

这是一个老问题,但我想解释最简单的方法:

@if(Session::has('message'))
    <div class="alert-box message">
        <h2>{{ Session::pull('message') }}</h2>
    </div>
@endif

答案 1 :(得分:2)

这不是更适合吗?

return View::make('superadmin::login')->with('message', 'Invalid credentials');

然后在你看来:

@if($message)
    <div class="alert-box message">
        <h2>{{ $message }}</h2>
    </div>
@endif

这是因为你不需要闪光,因为在闪光后你永远不会使用重定向。

答案 2 :(得分:1)

我宁愿使用Session:now()而不是Session:flash()就是这样。方法now闪烁消息以立即使用。