> 关于 Laravel 验证的错误信息处理,详情可以查看 [Validation](http://d.laravel-china.org/docs/5.3/validation "Validation") 文档,本文是根据其进行统一处理。 ### controller 代码 public function store(Request $request) { $post = Post::create($request->all()); if ($post) { return redirect('/post')->withSuccess('创建成功!'); } else { return redirect()->back()->withInput()->withWarning('创建失败!'); } } ### 新建warning.blade.php @if (session('warning')) × {{ session('warning') }} @endif @if (session('success')) × {{ session('success') }} @endif ### 在create.blade.php引入 @include('xxx') xxx为admin.layouts.warning ### 处理错误消息 当验证数据时,出现错误的话,会调用一个 Validator 实例的 errors 方法,会得到一个 Illuminate\Support\MessageBag 的实例,里面有许多可让你操作错误消息的便利方法。$errors 变量可以自动的被所有的视图获取,并且是一个MessageBag类的实例。 ##### 查看特定字段的第一个错误消息# 如果要查看特定字段的第一个错误消息,可以使用 first 方法: $errors = $validator->errors(); echo $errors->first('email'); ##### 查看特定字段的所有错误消息# 如果你想通过指定字段来简单的获取所有消息中的一个数组,则可以使用 get 方法: foreach ($errors->get('email') as $message) { // } 如果你正在验证一个数组的表单字段,你可以使用 * 来获取每个元素的所有错误信息: foreach ($errors->get('attachments.*') as $message) { // } ##### 查看所有字段的所有错误消息# 如果你想要得到所有字段的消息数组,则可以使用 all 方法: foreach ($errors->all() as $message) { // } ##### 判断特定字段是否含有错误消息# 可以使用 has 方法来检测一个给定的字段是否存在错误信息: if ($errors->has('email')) { // } ### 旧输入数据 Laravel 允许你将本次的输入数据保留到下一次请求发送前。这个特性在表单验证错误后重新填写表单相当有用。但是,如果你使用了 Laravel 的 验证特性,你就不需要在手动实现这些方法,因为 Laravel 内置的验证工具会自动调用他们。 ##### 将输入数据闪存至 Session# `Illuminate\Http\Request` 的 flash 方法会将当前输入的数据存进 session 中,因此下次用户发送请求到应用程序时就可以使用它们: $request->flash(); 你也可以使用 flashOnly 和 flashExcept 方法将当前请求数据的子集保存到 session。这些方法对敏感信息的保护非常有用: $request->flashOnly(['username', 'email']); $request->flashExcept('password'); ##### 闪存输入数据到 Session 后重定向# 你可能需要把输入数据闪存到 session 并重定向到前一个页面,这时只需要在重定向方法后加上 withInput 即可: return redirect('form')->withInput(); return redirect('form')->withInput( $request->except('password') ); ##### 获取旧输入数据# 若要获取上一次请求后所闪存的输入数据,则可以使用 Request 实例中的 old 方法。old 方法提供一个简便的方式从 Session 取出被闪存的输入数据: $username = $request->old('username'); Laravel 也提供了全局辅助函数 old。如果你要在 Blade 模板 中显示旧输入数据,可以使用更加方便的 old 辅助函数。如果旧数据不存在,则返回 null: ### 结合使用,显示具体错误信息,和旧输入数据 利用上述方法,我们可以在页面中灵活实现错误消息显示,并且可以显示老的输入数据。 controller页面代码: public function create() { return view('post/create'); } //使用 StorePostRequest 验证,验证不通过则返回错误信息,闪存到 Session public function store(Requests\StorePostRequest $request) { $input = $request->all(); $post = Post::create($input); //使用 withInput 会自动将 $request->old() 的数据传递到视图 if(!$post) { return redirect()->back()->withInput()->withWarning('创建失败!'); } return redirect('post/list')->withSuccess('创建成功!'); } view页代码: create.html '@include('layouts.warning')' ' 名称 '@include('layouts.valid', ['field' => 'name'])' ' warning.html ' @if (session('warning')) × {{ session('warning') }} @endif' '@if (session('success')) × {{ session('success') }} @endif ' valid.html ' ' ' @if ($errors->has($field)) {{ $errors->first($field) }} @endif ' 具体内容查看文档: [http://d.laravel-china.org/docs/5.3/validation](http://d.laravel-china.org/docs/5.3/validation "http://d.laravel-china.org/docs/5.3/validation") [http://d.laravel-china.org/docs/5.3/requests](http://d.laravel-china.org/docs/5.3/requests "http://d.laravel-china.org/docs/5.3/requests")