Laravel 5.5 的自定义验证对象/类示例代码详解
Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。
Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。。很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则。但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts\Validation\Rule 接口的类即可实现自定义的验证规则,并可以直接使用。
下面是一个简单的示例:
use Illuminate\Contracts\Validation\Rule; class IsOddValidationRule implements Rule { public function passes($attributes, $value) { return ($value % 2 !== 0); } public function message() { return ':attribute 必须是奇数'; } }
以上代码定义了一个 IsOddValidationRule 的自定义验证类,在 Controller 中要使用这个验证类的话,可以这样写:
public function handlForm(Request $request) { $this->validate($request, [ 'oddField' => [new IsOddValidationRule] ]); }
同样的效果,也可以通过匿名函数(闭包函数)来实现:
public function handleForm(Request $request) { $this->validate($request, [ 'oddField' => [function($attributes, $value, $fail) { if ($value % 2 === 0) { $fail(':attribute 必须是奇数!'); } }] ]); }
在验证的表单项为空值或者不存在的时候,对应的自定义验证规则不会执行。这个与系统自带的验证规则的逻辑是一致的。如果你希望你的自定义验证规则,即使是在对应的表单项为空值时也被执行的话,那么只要把继承的接口从 rule 改成 ImplicitRule 即可:
class IsOddValidationRule implements ImplicitRule { ... }
采用 Laravel 5.5 新增的自定义验证类,可以更好地管理大量的自定义验证规则,而且在 PHPStorm 之类的 IDE 中,从验证代码里快速跳转到对应的验证类的代码也会更方便。毕竟采用 Validator::extend 的话,你只能通过搜索对应验证类名称的字符串来找到规则定义的源代码。
匿名函数的自定义验证规则在一次性的简单验证逻辑中用起来确实会很方便,或者是在编码过程中快速测试验证逻辑也很实用。但是总的来说,还是建议采用更具组织性和可读性的自定义验证类。最佳方法是在编写 Controller 的过程中用匿名函数快速验证自定义规则,然后再把它移到自定义的验证类对象中。
你可以查看该功能在 Laravel 框架的 github 上的 Pull Request ,阅读具体的实现代码以及相关的测试代码。
参考
https://github.com/laravel/framework/pull/19155/files
https://laravel-news.com/custom-validation-rule-objects
总结
以上所述是小编给大家介绍的Laravel 5.5 的自定义验证对象/类示例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- 关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
- Laravel中间件实现原理详解
- Laravel的throttle中间件失效问题解决方法
- Laravel框架实现利用中间件进行操作日志记录功能
- Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
- Laravel5.1框架注册中间件的三种场景详解
- Laravel关联模型中过滤结果为空的结果集(has和with区别)
- Laravel4中的Validator验证扩展用法详解
- Laravel中unique和exists验证规则的优化详解
- 如何优雅的使用 laravel 的 validator验证方法
- laravel框架中间件 except 和 only 的用法示例
相关文章
laravel 数据迁移与 Eloquent ORM的实现方法
laravel 提供了很实用的 Eloquent ORM 模型类,简单、直观的与数据库进行交互。同时使用数据迁移管理数据库,可以与团队进行共享以及编辑,本文详细的介绍了laravel 数据迁移与 Eloquent ORM的实现方法,感兴趣的可以了解一下2019-04-04PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
这篇文章主要介绍了PhpStorm的使用教程(本地运行PHP+远程开发+快捷键),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-03-03Thinkphp5+PHPExcel实现批量上传表格数据功能
这篇文章主要介绍了Thinkphp5+PHPExcel实现批量上传表格数据功能,需要的朋友可以参考下2017-11-11PHP Ajax JavaScript Json获取天气信息实现代码
这篇文章主要介绍了PHP Ajax JavaScript Json实现天气信息获取 的相关资料,感兴趣的小伙伴们可以参考一下2016-08-08ThinkPHP中Common/common.php文件常用函数功能分析
这篇文章主要介绍了ThinkPHP中Common/common.php文件常用函数功能,通过注释的形式详细分析了C方法、tag方法、B方法及autoload方法的功能与代码原理,需要的朋友可以参考下2016-05-05
最新评论