当前位置: 首页 > 编程笔记 >

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

宇文和昶
2023-03-14
本文向大家介绍Laravel 5.5 的自定义验证对象/类示例代码详解,包括了Laravel 5.5 的自定义验证对象/类示例代码详解的使用技巧和注意事项,需要的朋友参考一下

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

 类似资料:
  • EasySwoole支持自定义添加一个socket资源参与系统底层的事件调度循环,添加事件循环与swoole原生的EventLoop一致,这里只做简单介绍,扩展应用请参照swoole文档 // 函数原型 bool swoole_event_add(int $sock, mixed $read_callback, mixed $write_callback = null, int $flags =

  • 本文向大家介绍Springboot 自定义校验代码实例,包括了Springboot 自定义校验代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Springboot 自定义校验代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 StartWithValidation.class StartWithValidator.clas

  • 本实例主要是为了解决部分用户输出验证码的时候,未能正确的把验证码响应至HTTP响应的问题。 namespace AppUtilityVerifyCode; class Verify { public static function create($codeStr){ $codeSet = '12346789ABCDEFGHJKLMNPQRTUVWXY';//字符容器

  • 本文向大家介绍IOS 自定义UIPickView详解及实例代码,包括了IOS 自定义UIPickView详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 IOS 自定义UIPickView 苹果一直推崇使用原生的组件,自带的UIPickView其实也很漂亮了,看起来也很美观。但是有时候,产品会有一些特殊的设计和需求。本文将会讲解如何修改苹果原生的组件的属性,达到自定义UIPickView的效

  • 本文向大家介绍python验证码识别的示例代码,包括了python验证码识别的示例代码的使用技巧和注意事项,需要的朋友参考一下 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。 相应的,验证码识别大体

  • 主要内容:自定义验证器类实例我们可以在JSF中创建自己的自定义验证器。以下列表是在JSF中创建自定义验证器的步骤。 通过实现接口创建一个验证器类。 实现上面接口的方法。 使用注释为自定义验证器分配唯一的ID。 自定义验证器类实例 打开 NetBeans IDE 创建一个Web工程:CustomValidator,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result