Thinkphp 中间件结合Validate

//生成资源控制器  php think make:controller app\index\controller\User

//路由定义
Route::resource('user','index/user')->middleware('Check');

//生成验证规则 php think make:validate index/User
namespace app\index\validate;

use think\Validate;

class User extends Validate
    protected $rule = [
        'user_name' => 'require|alphaNum',
        'password'  => 'require',
    ];

    protected $message = [
        'user_name.require'  => '请输入账号',
        'user_name.alphaNum' => '账号只能是数字和字母',
        'password.require'   => '请输入密码',
    ];
    protected $scene = [
        'login'    => ['user_name', 'password'],
        'register' => ['user_name', 'password'],
    ];

//生成中间件 php think make:middleware Check
<?php

namespace app\http\middleware;
use think\Controller;

class Check extends Controller
{
    public function handle($request, \Closure $next)
    {
        //获取当前参数
        $params = $request->param();
        //获取访问模块
        $module = $request->module();
        //获取访问控制器
        $controller = ucfirst($request->controller());
        //获取操作名,用于验证场景scene
        $scene    = $request->action();
        $validate = "app\\" . $module . "\\validate\\" . $controller;
        //仅当验证器存在时 进行校验
        if (class_exists($validate)) {
            $v = $this->app->validate($validate);
            if ($v->hasScene($scene)) {
                //仅当存在验证场景才校验
                $result = $this->validate($params, $validate . '.' . $scene);
                if (true !== $result) {
                    //校验不通过则直接返回错误信息
                    return json(['code' => -1, 'msg' => $result]);
                }
            }
        }
        return $next($request);
    }
}

猜你喜欢

转载自www.cnblogs.com/ssx314/p/10232422.html
今日推荐