withX() 在 Laravel 4.2 中不起作用

withX() does not work in Laravel 4.2

问题是 withErrors() 在此代码中运行良好,但 withMessage() 却不是。

我也试过('message','Test message!')。在视图文件中,我可以使用 $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

那是因为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 对 [=12= 的作用基本相同]:

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