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 相关文章推荐
新浪新闻小偷
Oct 09 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 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 Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
jQuery示例收集
2010/11/05 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
基于vue实现分页效果
2017/11/06 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
门卫人员岗位职责
2013/12/24 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
纪检监察立案决定书
2015/06/24 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Python并发编程实例教程之线程的玩法
2021/06/20 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
MySQL中的隐藏列的具体查看
2021/09/04 MySQL