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'],
]);
}
}-------------本文结束感谢您的阅读-------------
