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 Undefined index和Undefined variable的解决方法
Mar 27 PHP
php下使用以下代码连接并测试
Apr 09 PHP
PHP集成FCK的函数代码
Sep 27 PHP
php 时间计算问题小结
Jan 04 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php计算title标题相似比的方法
Jul 29 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
PHP递归统计系统中代码行数
Sep 19 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实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
Python类中self参数用法详解
2020/02/13 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
眼镜促销方案
2014/03/15 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
民主评议党员工作总结
2014/10/20 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
体育委员竞选稿
2015/11/21 职场文书