使用 Laravel 的 ValidatesRequests trait 验证请求是非常简单的,该 trait 已经通过 BaseController 被自动包含进来。它的功能非常强大,并为常用的情况提供了多个有用的规则。其中 exists() 和 unique() 用于验证数据是否在数据库中存在,通常使用方式如下:
// exists 例子 'email' => 'exists:staff,account_id,1' // unique 例子 'email' => 'unique:users,email_address,$user->id,id,account_id,1'
你可以看到,这种方式不便于记忆,有时候你可能经常需要去查看文档。
从 Laravel v5.3.18 开始,这两个规则都通过新引入的 Rule 类被简化了。
使用上面相同的例子,通过下面这个更流畅的例子可以达到相同的效果:
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],'email' => [
'required',
Rule::unique('users')->ignore($user->id)->where(function ($query) {
$query->where('account_id', 1);
})
],这两个方法都支持下面的方法:
wherewhereNotwhereNullwhereNotNull
unique 方法包含额外的 ignore 方法,所以你可以验证其他的数据。
这个新特性的另一个福利是旧的方式依然完全支持,实现方式是通过 formatWheres 方法转换为旧的字符串方式:
protected function formatWheres()
{
return collect($this->wheres)->map(function ($where) {
return $where['column'].','.$where['value'];
})->implode(',');
}要获取最新版本你需要运行 composer update,一旦获取到 v5.3.18 你就可以使用这种全新的流畅的方式了。
Update On 2016-10-16:
demisions 规则也将在 Laravel v5.3.19 中加入新的方式:
via: laravel-news

