php – Laravel Session Flash持续存在2个请求

前端之家收集整理的这篇文章主要介绍了php – Laravel Session Flash持续存在2个请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我已经从Codeigniter改为Laravel,除了遇到了Session :: flash的问题,一切顺利.

当我创建新用户时,我会获得成功消息,但是会持续2个请求,即使我没有通过验证器:

我的代码在UsersController中:

function getCreateUser(){
    $config = array(
        'pageName' => 'createUser','pageTitle' => 'Create User','formUrl'   => action('UsersController@postCreateUser'),'modelFields'   => array(
            array('db_name' => 'employee_id','text' => 'Employee Id','mandatory' => TRUE),array('db_name' => 'full_name','text' => 'Full Name',array('db_name' => 'email','text' => 'Email','mandatory' => FALSE),array('db_name' => 'password','text' => 'Password','value' => '12345','mandatory' => TRUE)
            ),'submit_text' => 'Create'
        );
    return View::make('layouts.form',$config);
}

function postCreateUser(){
    $config = array(
        'pageName' => 'createUser','submit_text' => 'Create'
        );
    $validator = User::validate(Input::all());
    if($validator->passes()){
        $user = new User(Input::all());
        $user->password = Hash::make(Input::get('password'));
        $user->Company_id = '1';
        $user->save();

        Session::flash('message','User Created Successfully!'); 
        Session::flash('alert-class','alert-success');
        return View::make('layouts.form',$config);
    } 

    return View::make('layouts.form',$config)->withErrors($validator->messages());
}

在form.blade中:

@if ( $errors->count() > 0 )
<div class="alert alert-danger">
    <p>The following errors have occurred:</p>

    <ul>
        @foreach( $errors->all() as $message )
        <li>{{ $message }}</li>
        @endforeach
    </ul>
</div>
@endif

在master.blade:

@if(Session::has('message'))
<p class="alert {{ Session::get('alert-class','alert-info') }} alert-dismissable"> {{ Session::get('message') }}</p>
@endif

也许我不是孤独的这个问题,here是另一个未回答的问题.

更新

对于将来面临这个问题的人来说:
不重新启动会话数据.

我的代码现在看起来像这样:

function postCreateUser(){
    $validator = User::validate(Input::all());
    if($validator->passes()){
        $user = new User(Input::all());
        $user->password = Hash::make(Input::get('password'));
        $user->Company_id = '1';
        $user->save();

        Session::flash('message','alert-success');
    } else {
        Session::flash('message',Helpers::formatErrors($validator->messages()->all()));
        Session::flash('alert-class','alert-danger');
    }

    return Redirect::action('UsersController@getCreateUser');
}
您正在闪烁会话数据并创建视图,而不是重定向,这意味着消息将为此请求的闪存和下一个显示两次.

如果要在不重定向的情况下显示当前请求的消息,我建议您向View :: make提供错误,而不是尝试Flash消息.如果您必须在当前请求上刷新消息,那么在您的视图之后,您将需要Session :: forget(‘key’)或Session :: flush().

猜你在找的Laravel相关文章