关于Laravel中自定义通用校验规则的使用终结

最近因项目需求中对银行卡号啦 身份证的校验比较多 校验方法写的也比较复杂 想把这部分校验单独提出来做一个通用的

方便以后别的地方可以使用 就像系统中的 Validator 下的那些通用验证一样使用 (其实好像就是扩展Validator) 囧


注意:下面的方法记得使用 Laravel 5.2版本5.1的我没有测试过 反正5.0的是不可以

在 bootstrap\autoload.php文件中的大概30-35行

1
2
3
4
$compiledPath = __DIR__.'/../vendor/compiled.php';
if (file_exists($compiledPath)){
require $compiledPath;
}

他这里有引入vendor下的compiled.php文件 在这个文件中有对好多类的覆盖 不是很懂这个类的作用
比如在大概17093-17105行就有一个 AppServiceProvider 的类

1
2
3
4
5
6
7
8
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider{
public function boot(){}
public function register(){
$this->app->bind('Illuminate\\Contracts\\Auth\\Registrar', 'App\\Services\\Registrar');
}
}

这里这个导致了外面的 app\Providers\AppServiceProvider.php 的无效

定义通用 Function

一般我们会先创建一个php文件 用来放一些通用的function

比如我习惯在app文件下建一个Functions的文件夹 然后在这里创建一个helper.php文件 大概路径这样 app\Functions\helper.php

比如增加如下一个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if (! function_exists('checkSomeOne')){
/**
* 这是一个测试方法(可以带参数也可以不带的)
*/
function checkSomeOne($name){
if($name == 'LL'){
return true;
}else{
return false;
}
}
}
?>

自动载入该帮助类

bootstrap\autoload.php文件中引入上面创建的帮助类

1
require __DIR__.'/../app/Functions/helper.php';
添加服务

app\Providers\AppServiceProvider.php文件中引入 Validation

1
use Validator;

然后在 boot 方法中增加如下代码

1
2
3
4
5
6
7
8
9
10
11
/**
* Bootstrap any application services.
* @return void
*/
public function boot()
{
//这是一个测试[这3个参数含义第一个是被验证的属性的名称, 第二个是被验证的属性的值, 第三个是一个规则中指定的参数数组]
Validator::extend('checkSomeOne', function($attribute, $value, $parameters){
return checkSomeOne($value);
});
}
测试

我在app\Http\Controller下新建了一个controller做测试用 这个随便了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
namespace App\Http\Controllers;
use Validator;
class HomeController extends Controller {
/**
* 测试
* @return \Illuminate\Http\JsonResponse
*/
public function index()
{
$name="LL2";
$params=array('name'=>$name);
$rules=array(
'name'=>'checksomeone',
);
$message=array(
'name.checksomeone'=>'name not found'
);
$v=Validator::make($params,$rules,$message);
if($v->fails()){
return response()->json(array('status'=>false,'msg'=>'has fail'));
}
//success
echo "is ok";
}
}
?>

-------------The End-------------