Laravel5.5新特性之自定义验证规则

在Laravel5.5中支持了自定义验证规则以此来作为Validator:extend进行验证规则的替换方法

简介

Laravel5.5正式版这些天也即将发布 他给我们带来的新特性也十分一批开发者激动不已 我们先来谈谈所支持的自定义验证规则

Laravel5.5中新增了php artisan make:rule这个命令 这个命令可以很方便的生成我们自己定义的验证规则

在自己的实现的验证规则里我们可以自己去定义业务判断逻辑

着手实现

1.创建项目
因为Laravel5.5还没有正式发布 不过我们是可以拿到它的源码 在命令行执行

1
$ laravel new laravel5-5 --dev

过会儿便可以下载完成 下载完成之后我们会看见有个报错页面 嗯哼
1

这个报错看起来很酷有木有 我们可以准备看到报错信息和文件位置 当然还可以直接google到相应的解决方案 nice~

当然这里的报错是因为我们还没有生成app:key so在项目根目录下执行

1
$ php artisan key:generate

重新启动一下我们的项目就ok

2.创建规则
作为事例 我们可以去创建一个简单的字符串长度判断的验证 在终端执行:

1
$ php artisan make:rule LengthRule

这个时候我们会发现在app目录下的rule文件夹下生成了LengthRule.php的验证文件

而我们主要的验证方法就是在pass方法中去实现

1
2
3
4
public function passes($attribute, $value)
{
return $value>6;
}

当然在下面的message方法中去定义我们的验证结果的消息

1
2
3
4
public function message()
{
return '字符串长度不能低于6位';
}

这样的话我们就可以在控制器的方法中去使用这个验证规则

1
2
3
4
5
6
public function testRule()
{
$this->validate(request(),[
'name'=>[new LengthRule()]
]);
}

如果想要测试简单的方法就是在路由中新建一个方法 对于参数可以使用借助postman等工具提交参数请求

值得注意的是如果这个参数字段为空 那么这个验证规则是不会执行的 要想不存在这个字段也去执行这个这个验证规则

那么我们需要去实现ImplicitRule契约 比方说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class LengthRule implements ImplicitRule
{
public function __construct()
{
//
}
public function passes($attribute, $value)
{
return $value>6;
}
public function message()
{
return '字符串长度不能低于6位';
}
}

对于想了解这样的新特性最好的办法就是去Github上的这个项目的PR