Laravel 独一无二和存在验证规则的改进
发布于 作者 Eric L. Barnes
使用 Laravel 的 ValidatesRequests
特性验证请求很简单,该特性会通过 BaseController 自动包含。
它功能强大,并为常见用例提供了许多有用的规则。两个规则,exists()
和 unique()
,用于验证数据库中存储的数据,它们始终具有以下格式
// exists example'email' => 'exists:staff,account_id,1'// unique example'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,一旦它下载了 5.3.18,您就可以开始使用这种新的流畅样式。