Laravel 5.5 make:rule 简介

JellyBool

JellyBool

Laravel 5.5 即将发布,然后本文来介绍一个我个人觉得不错的新特性,就是你可以使用 make:rule 命令来创建一个自定义的表单验证规则了。比如想象这样一个应用场景,我们需要通过表单验证来检查用户输入的手机号是否是一个正确的手机号

回顾

在之前的 laravel 版本当中,我们自定义验证规则的时候使用类似 Validator::extend 的语法的,比如可以加在 AppServiceProvider 中,这样:

public function boot()
{
 Validator::extend('rule_name', function ($attribute, $value) {
  });
}

这样其实也 OK,不过在 Laravel 5.5 的时候,这种验证扩展就更灵活了,或者说更像 Laravel 的 style。

使用 make:rule

这是一个 artisan 的命令,比如我们来创建一个 ValidatePhoneRule

php artisan make:rule ValidatePhoneRule

这样创建的文件就在放在 app\Rules 中,其中非常关键的是我们需要去实现 pass()message() 方法:

class ValidatePhoneRule implements Rule {
  const PHONEREG = '/^(13[0-9]|14[579]|15[0-3,5-9]|17[0135678]|18[0-9])\\d{8}$/';
  private $value;

  public function passes($attribute, $value)
  {
    $this->value = $value;
    return (bool) preg_match(self::PHONEREG, $value);
  }

  public function message()
  {
    return "手机号 {$this->value} 不正确";
  }
}

pass() 方面里面具体实现我们的验证,比如这里的使用正则表达式验证手机号。message()
方法负责返回提示信息。

使用

这样实现之后,我们就可以在验证的时候这样使用:

'phone' => [
  'required',new ValidatePhoneRule,
]

phone 就是表单字段,然后我们直接 new ValidatePhoneRule 就可以将我们自定义的手机号验证实现了。

总结

一直以来,Laravel 的表单验证都是很强大,不过在 5.5 版本之后,这个事情做得又更优雅了,实在是很棒!所以在抢先 5.5 的同学其实可以使用一波的。

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 1 条评论

daoyi
修改的评论也不能少于六个字哦!
JellyBool 回复 daoyi
修改的评论也不能少于六个字哦!