tp6做一个全局数据验证中间件
设置中间件Validata.php
<?php declare (strict_types = 1); namespace app\admin\middleware; use think\exception\ValidateException; class Validata { /** * 处理请求 前置中间件 * * @param \think\Request $request * @param \Closure $next * @return Response */ public function handle($request, \Closure $next) { //判断是否为ajax提交 ajax提交则开始验证 if($request->isAjax()){ //获取当前参数 $params = $request->param(); if(!empty($params)){ //获取控制器 操作方法 $controller = $request->controller(); $action = $request->action(); //检查验证文件是否存在 //不存在则跳过验证 $validate = $this->exists_validate($controller); if(empty($validate)){ return $next($request); } //验证数据 $results = $this->validate_data($action, $validate, $params); if($results){//验证不通过 , 返回错误信息并终止后面程序操作 return show(0,$results); die; } }else{ return show(0,"参数为空!"); } } return $next($request); } /** * 检查文件是否存在 * @param null $validate //类名 * @param string $model 应用名||模块名 * @return bool|string */ public function exists_validate($validate, $model='admin') { $mokuai = $model."\\"; $file = "app\\".$mokuai."validate\\" .$validate; if(class_exists($file)){ return $file; } return false; } /** * 验证数据 * @param $action 验证场景 * @param $validate 验证类的路径 * @param $params 需要验证的数据 * @return bool|string */ public function validate_data($action, $validate, $params) { //设置验证场景 $scene = $action; if(empty($scene)){ return false; } //数据验证 try { $v = validate($validate); if($v->hasScene($scene)){ //设置验证场景 //验证数据 $v->scene($scene)->check($params); }else{ return false; } return false; } catch (ValidateException $e) { // 验证失败 输出错误信息 return $e->getError(); } } }
一个封装好的返回Json数据的方法 , 由于tp6取消了旧版的success和error跳转 , 需要安装扩展才能实现url访问跳转
composer require liliuwei/thinkphp-jump
/** * 返回参数方法 * @param integer $code code状态码 * @param string $msg 返回的提示参数 * @param string $url 返回的跳转url * @param string $data 返回的数据 * @param integer $httpcode 返回的http状态码 * @param integer $wait 跳转倒计时 * @return */ function show(int $code = 0 , $msg='' , string $url = null , $data='',$httpcode = 200 , int $wait = 3 ){ if (is_null($url) && isset($_SERVER["HTTP_REFERER"])) { $url = $_SERVER["HTTP_REFERER"]; } elseif ($url) { $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : (string)\think\facade\Route::buildUrl($url); } //如果消息提示为空,并且业务状态码定义了,那么就显示默认定义的消息提示 if (empty($msg) && !empty(config("status." . $code))) { $msg = config("status." . $code); } $result = [ 'code' => $code, 'msg' => $msg, 'data' => $data, 'url' => $url, 'wait' => $wait, ]; $request = request(); //判断是否为Ajax提交 if ($request->isAjax()){ return json($result); }else{ return view(config()['jump']['dispatch_success_tmpl'],[ 'code'=>$result['code'], 'msg'=>$result['msg'], 'url'=>$result['url'], 'data'=>$result['data'], 'wait'=>$result['wait'], ]); } }
-------------本文结束感谢您的阅读-------------