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调用数据库的存贮过程!
Oct 09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
PHP Pear 安装及使用
Mar 19 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
php+mysql查询优化简单实例
Jan 13 PHP
PHP多文件上传类实例
Mar 07 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 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生成随机密码
2015/10/30 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
基于Python __dict__与dir()的区别详解
2017/10/30 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
简单了解如何封装自己的Python包
2020/07/08 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
小学校园活动策划
2014/01/30 职场文书
2014政务公开实施方案
2014/02/19 职场文书
和睦家庭事迹
2014/05/14 职场文书
通信工程专业求职信
2014/06/04 职场文书
学校端午节活动方案
2014/08/23 职场文书
职工年度考核评语
2014/12/31 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
浅谈Java父子类加载顺序
2021/08/04 Java/Android