laravel自定义验证类
准备条件
- laravel版本5.5x~
- 对laravel有一点熟悉
开始
封装 获取控制器且成员方法的公共函数
- 前提交件:新建一个公共类,里面写公共方法
/**
* 获取当前控制器与方法
*/
function getCurrentAction()
{
$route = \Route::currentRouteAction();
list($class, $action) = explode('@', $route);
return ['controller' => $class, 'action' => $action];
}
-
composer.json 文件下面的自动加载 这个公共类
-
"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ], "files": [ //在files里面写上地址,框架运行自动加载这个类 "app/Helpers/functions.php" ] },
封装验证类
-
新建一个FormsRequest.php
-
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; //继承原生的框架表单验证类 class FormsRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $action = getCurrentAction()['action']; //获取当前请求的方法名 $request_rule = $this->rulesData(); //获取验证规则 return $request_rule[$action]??[]; } }
规则类
-
规则类主要是,一个控制器对应一个规则类,每个方法对应不同的验证规则
-
<?php namespace App\Http\Requests\Test; use App\Http\Requests\FormsRequest; class TestRequest extends FormsRequest //此处继承验证类 { /** * @return array * 验证规则 */ public function rulesData() //验证方法 { return [ 'index'=>[ //控制器下的方法名 'name'=>'required', //字段验证规则 ], 'xxx'=>[ ] ]; } }
控制器
<?php
namespace App\Http\Controllers\Test;
use App\Http\Controllers\Controller;
use App\Http\Requests\Test\TestRequest;
use App\Services\Test\TestService;
use App\Models\User;
use Illuminate\Support\Facades\Redis;
class TestController extends BaseController {
public function index(TestRequest $request){
return (new TestService())->test($request);
}
}