狗林技术

  • 首页
  • 技术分享
    • PHP
    • Go
    • Linux
    • JavaScript
    • Vue
    • 其他

Menu

  • 首页
  • 技术分享
    • PHP
    • Go
    • Linux
    • JavaScript
    • Vue
    • 其他
  • 1970.01.01遇到Undefined constant "CURL_SSLVERSION_TLSv1_2"错误
  • 1970.01.01linux防火墙操作
  • 1970.01.01linux centos系统安装php的redis扩展
  • 1970.01.01Golang实现自定义JWT生成与验证
  • 1970.01.01php项目中Nginx文件解析漏洞
  • 1970.01.01Nginx配置跨域
更多
个人简介
个人简介


职业:PHP开发,Go开发

          前端开发

现居:浙江省-杭州市

Email:1047571953@qq.com

                               

热门文章

  • git的学习过程

    git的一些常用命令

  • Go文档

    Go http://www.topgoer.com gorm https://learnku.com/docs/gorm/v2/about-mirror-image/9754 gin https://www.kancloud.cn/lhj0702/sockstack_gin/1805355

  • tp5.1用GatewayWorker做一个简单的聊天室

    tp5.1用GatewayWorker做一个简单的聊天室 , 源码文件

  • TP5.1 查询数据库中上一条和下一条记录

    ->where("id", ">", $id)->order("id", "asc")->find();<br/> ​->where('id' , '<' , $id)->order("id", "desc")->find();

联系我

    zxl77l 微信号 1047571953@qq.com QQ邮箱 1047571953 QQ号

tp6做一个全局数据验证中间件

分类:PHP   作者:狗林   - 发布于:2021/05/18   862

设置中间件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'],
        ]);
    }
}


上一篇 : 遇到Undefined constant "CURL_SSLVERSION_TLSv1_2"错误

下一篇 : laravel速查表

-------------本文结束感谢您的阅读-------------

首页 技术分享

湘ICP备2021006798号

Copyright © 2021 狗林技术. All Rights Reserved.

友情链接: 测试链接

大家都在搜

  • 张三
  • 李四
  • 王二

关注我

微信号