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 的同学其实可以使用一波的。