验证器类验证
如果您不想再请求中使用 validate 方法,您可以使用 Validator 门面 手动创建一个验证器实例。门面中的 make 方法将会生成一个新的验证器实例:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
/**
* 存储一篇博客文章
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
}
}
方法中的第一个参数是期望校验的数据。第二个参数是应用到数据上的校验规则。
如果校验失败,您可以使用 withErrors 方法将错误信息闪存至 session 中。使用该方法时, $errors 会自动与之后的视图共享,您可以很方便将其回显给用户。withErrors 方法接受验证器实例, MessageBag 或是 PHP 数组。
自动重定向
如果您想要在手动创建验证器实例的同时,使用请求的 validate 方法的自动重定向功能,那么您可以在现有的验证器实例上调用 validate 方法。如果校验失败,用户将被自动重定向,或在 AJAX 请求下,将会返回一个 JSON 响应:
Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
])->validate();
如果校验失败,您可以使用 validateWithBag 方法将错误信息存储到 命名错误包 中。
Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
])->validateWithBag('post');
命名错误包
如果您的一个页面中存在多个表单,您可以为错误的 MessageBag 命名,用于检索指定表单的错误信息。只需将名称作为 withErrors 的第二个参数传递给它:
return redirect('register')
->withErrors($validator, 'login');
您可以通过 $errors 变量访问命名后的 MessageBag 实例:
{{ $errors->login->first('email') }}