扫码一下
查看教程更方便
Validator
如果我们不想在Request上使用validate
方法,那么我们可以使用Validator Facade
中的make
方法手动创建一个验证器实例:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
/**
* Store a new blog post.
*
* @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();
}
// Store the blog post...
}
}
make
方法的第一个参数是需要验证的请求数据,第二个参数是用于验证的验证规则。
如果验证失败,可以使用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') }}
验证程序还允许我们在验证完成后调用回调函数。这使我们可以轻松地执行进一步的验证,甚至可以将更多错误消息添加到消息集合中。可以用Validator 实例上的after
方法实现:
$validator = Validator::make(...);
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
if ($validator->fails()) {
//
}