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 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php 缩略图实现函数代码
2011/06/23 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Python 加密的实例详解
2017/10/09 Python
深入浅析python with语句简介
2018/04/11 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
keras和tensorflow使用fit_generator 批次训练操作
2020/07/03 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
python中spy++的使用超详细教程
2021/01/29 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
美国轮胎网站:Priority Tire
2018/11/28 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
个人找工作自荐信格式
2013/09/21 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
爱牙日活动总结
2014/08/29 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫