Laravel 5.5 的自定义验证对象/类示例代码详解


Posted in PHP onAugust 29, 2017

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 的自定义验证对象/类示例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP的FTP学习(二)[转自奥索]
Oct 09 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
Apache中php.ini的设置方法
Feb 28 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
Jul 02 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
浅谈php处理后端&接口访问超时的解决方法
Oct 29 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
PHP单例模式与工厂模式详解
Aug 29 #PHP
PHP迭代与递归实现无限级分类
Aug 28 #PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 #PHP
PHP大文件分割上传 PHP分片上传
Aug 28 #PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 #PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 #PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 #PHP
You might like
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python操作 hbase 数据的方法
2016/12/18 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python3获取当前目录的实现方法
2019/07/29 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
优秀的个人求职信范文
2014/05/09 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技