使用 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); }) ],
这两个方法都支持下面的方法:
where
whereNot
whereNull
whereNotNull
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