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(5) 类和对象
Feb 16 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
PHP网站备份程序代码分享
Jun 10 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
php实现递归的三种基本方式
Jul 04 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
PDO::getAttribute讲解
Jan 28 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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
PHP与javascript对多项选择的处理
2006/10/09 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
PHP7 list() 函数修改
2021/03/09 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
numpy库reshape用法详解
2020/04/19 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
城市轨道专业个人求职信范文
2013/09/23 职场文书
实习护士自我鉴定
2013/10/13 职场文书
小学生考试获奖感言
2014/01/30 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
学籍证明模板
2014/11/21 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
分享几种python 变量合并方法
2022/03/20 Python