withX()在Laravel 4.2中不起作用

时间:2015-01-02 11:30:18

标签: php laravel

问题是 withErrors()在此代码中完美运行,但 withMessage()则不然。

我也试过('消息','测试消息!')。在视图文件中,我可以使用$ errors变量检索withErrors,但是如果我想检索withMessage,我必须使用Session :: get('message')。为什么$ message不起作用?

控制器:

public function registration() {
    $rules = array(...);
    $validator = Validator::make(Input::all(), $rules);

    if($validator->fails()) {
        return Redirect::route('registration')->withErrors($validator);
    }
    else {
        //Some code here...

        return Redirect::route('registration')->withMessage('Test message!');
    }
}

模板:

@extends('default.base')

@section('main')
    @if(!empty($errors->all()))
        <div class="alert alert-danger" role="alert">
            <ul>
                @foreach($errors->all() as $error)
                    <li>{{ $error }}
                @endforeach
            </ul>
        </div>
    @endif


    @if(isset($message))
    {{ $message }}
    @endif
@stop

1 个答案:

答案 0 :(得分:2)

这是因为errors是一个特例。创建视图时,Laravel会检查是否存在名为errors的会话变量。如果是,则会将内容$errors传递给视图。

Illuminate\View\ViewServiceProvider@registerSessionBinder

if ($me->sessionHasErrors($app))
{
    $errors = $app['session.store']->get('errors');

    $app['view']->share('errors', $errors);
}

这意味着您要么在视图中使用Session::has('message')Session::get('message'),要么添加View Composer,其基本与Laravel对errors的处理方式相同:

View::composer('*', function($view){
    if(Session::has('message')){
        $view->with('message', Session::get('message'));
    }
});