Laravel 5.5 的自定义验证对象/类示例代码详解

发布时间 - 2026-01-11 03:00:27    点击率:

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 的自定义验证对象/类示例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# laravel  # 自定义验证  # 关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析  # Laravel中间件实现原理详解  # Laravel的throttle中间件失效问题解决方法  # Laravel框架实现利用中间件进行操作日志记录功能  # Laravel框架基于中间件实现禁止未登录用户访问页面功能示例  # Laravel5.1框架注册中间件的三种场景详解  # Laravel关联模型中过滤结果为空的结果集(has和with区别)  # Laravel4中的Validator验证扩展用法详解  # Laravel中unique和exists验证规则的优化详解  # 如何优雅的使用 laravel 的 validator验证方法  # laravel框架中间件 except 和 only 的用法示例  # 自定义  # 是在  # 提供一个  # 表单  # 小编  # 为空  # 是一个  # 如果你  # 也有  # 也会  # 你可以  # 在此  # 但在  # 把它  # 要把  # 也很  # 可以通过  # 给大家  # 不存在  # 然后再 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速选择适合个人网站的云服务器配置?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  linux写shell需要注意的问题(必看)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  独立制作一个网站多少钱,建立网站需要花多少钱?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel如何使用Blade模板引擎?(完整语法和示例)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何在阿里云部署织梦网站?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在阿里云虚拟服务器快速搭建网站?  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何在 React 中条件性地遍历数组并渲染元素  如何快速搭建高效可靠的建站解决方案?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  微信小程序 require机制详解及实例代码  Laravel怎么在Blade中安全地输出原始HTML内容  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Android GridView 滑动条设置一直显示状态(推荐)  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何在阿里云域名上完成建站全流程?  使用Dockerfile构建java web环境  百度浏览器如何管理插件 百度浏览器插件管理方法  微信小程序 HTTPS报错整理常见问题及解决方案  如何快速生成橙子建站落地页链接?  HTML 中动态设置元素 name 属性的正确语法详解  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  bootstrap日历插件datetimepicker使用方法  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何快速使用云服务器搭建个人网站?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  PythonWeb开发入门教程_Flask快速构建Web应用  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  iOS UIView常见属性方法小结  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  浅谈javascript alert和confirm的美化  phpredis提高消息队列的实时性方法(推荐)  青岛网站建设如何选择本地服务器?  如何正确下载安装西数主机建站助手?  Laravel Docker环境搭建教程_Laravel Sail使用指南