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公用函数列表[正则]
Feb 22 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
CI框架简单邮件发送类实例
May 18 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
Yii框架 session 数据库存储操作方法示例
Nov 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php生成zip文件类实例
2015/04/07 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
PHP的全局错误处理详解
2016/04/25 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP时间函数使用详解
2019/03/21 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
JavaScript中的this机制
2016/01/30 Javascript
ionic3 懒加载
2017/08/16 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python绘制组合图的示例
2020/09/18 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
料理师求职信
2014/01/30 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
司考复习计划
2015/01/19 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript