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编码规范-php coding standard
Mar 16 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
php实现微信分享朋友链接功能
Feb 18 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 PHP
Laravel 前端资源配置教程
Oct 18 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实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
js模糊查询实例分享
2016/12/26 Javascript
loading动画特效小结
2017/01/22 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Python实现时间序列可视化的方法
2019/08/06 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
2015最新民情日记范文
2015/06/26 职场文书
创业计划书之酒吧
2019/12/02 职场文书
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers