在thinkphp5.1 自定义验证规则 获取get 传递的值的时候 传递了 值 能够获取到 验证出错

控制器:

    public function teamDetail(){
       if(request()->isGet()){
           $team_id = $this->request->get('team_id', '');
           $this->validate->scene('teamDetail')->check($team_id);
           if ($this->validate->getError()) {
               return resultArray(lang(strval($this->validate->getError())));
           }
           $page = $this->request->param('page', '1');
           $limit = $this->request->param('limit', '10');
           return $this->logic->teamDetail($team_id,$page,$limit);
       }
       return '';
    }

验证规则:

<?php

namespace app\daogou\validate;

use think\Validate;

class OrderValidate extends BaseValidate
{
    /**
     * 定义验证规则
     * 格式:'字段名'	=>	['规则1','规则2'...]
     *
     * @var array
     */	
	protected $rule = [
        'goodsName' => 'require|max:255', // 商品名称,必需且最大长度为255个字符
        'goodsImage' => 'require|url', // 商品图片,必需且为有效的URL
        'tags' => 'max:255', // 标签,最大长度为255个字符
        'price' => 'require|float|gt:0', // 价格,必需且为浮点数
        'contact' => 'require|mobile', //  买家联系方式,必需且为手机号码
        'property' => 'require|json', // ,必需且为json
        'dgId' => 'require|integer' , //商品id
        'addressId' =>'require|string', //用户的地址
        'orderId' => 'require|integer', //订单id
        'orderType' => 'require|string' , //订单类型 奖购 团购  闪购
        'maxBuyer' => 'require|integer|gt:0',   //团购最大参团人数
        'winner'   => 'require|integer|gt:0' ,   //团购中将人数
        'introduction' => 'require' ,  //商品简介
        'phone' => 'require|mobile',  //卖家电话
        'consignee' => 'require', //收货人
        'user_tel' => 'require|mobile', //收货人电话
        'status' => 'require|integer' ,// 上下架状态
        'fpeId' => 'require|integer', // 域id
        'goodId' => 'require|string' , //卖出-团购-收货信息
        'publish_area' =>'require',  //发布域
        'team_id' => 'require'      //主订单id

    ];
    
    /**
     * 定义错误信息
     * 格式:'字段名.规则名'	=>	'错误信息'
     *
     * @var array
     */	
    protected $message = [
        'goodsName.max' => '商品名称最大长度不能超过255个字符!',
        'goodsName.require' => '商品名称不能为空!', // 商品名称,必需且最大长度为255个字符
        'goodsImage.require' => '商品图片不能为空!', // 商品图片,必需且为有效的URL
        'goodsImage.url' => '请上传图片',  //
        'tags.max' => ' 标签最大长度为255个字符!', // 标签,最大长度为255个字符
        'price.require' => '请输入有效的价格!', // 价格,必需且为浮点数
        'price.float' => '请输入有效的价格!', // 价格,必需且为浮点数
        'price.gt' => '请输入有效的价格!', // 价格,必需且为浮点数
        'contact.require' => '手机号码格式不正确!', // 联系方式,必需且为手机号码
        'contact.mobile' => '手机号码格式不正确!', // 联系方式,必需且为手机号码
        'property.require' => '请设置奖励参数', // 属性,必需且为布尔值(true或false)
        'property.json' => '请设置奖励参数为josn格式', // 属性,必需且为布尔值(true或false)
        'dgId.require' => "商品id不能为空",
        'dgId.integer' => '商品Id必须为int类型',
        'addressId.require' => '收货地址不能为空',
        'addressId.string' => '收货地址错误',
        'orderId.require'  => '订单id不能为空',
        'orderId.integer' => '订单id不符合要求',
        'orderType.require' => '订单类型不能为空',
        'orderType.string' => '订单类型错误',
        'maxBuyer.require' => '团购人数不能为空',
        'maxBuyer.integer' => '团购人数必须为整数',
        'maxBuyer.gt' => '团购人数必须为大于0',
        'winner.require' =>'获奖人数不能为空',
        'winner.integer' =>'获奖人数必须为整数',
        'winner.gt' =>'获奖人数必须大于0',
        'introduction.require' => '商品简介不能为空',
        'phone.require' => '卖家电话电话不能为空',
        'phone.mobile' => '卖家电话格式不正确',
        'consignee.require' => '收货人不能为空',
        'user_tel.require' => '收货人电话不能为空',
        'user_tel.mobile' => '收货人电话格式不正确',
        'status.require' => '商品的上下架状态不能为空',
        'status.integer' => '商品上下架状态不符合要求',
        'goodId.require' => '商品id不能为空',
        'goodId.string' => '商品id不正确',
        'publish_area.require' => '发布区域不能为空',
        'team_id.require' => '主订单Id不能为空'
    ];

    protected $scene = [
        'order' => ['goodsName','price','goodsImage','tags','contact','property','publish_area'],//奖购
        'userOrder' => ['dgId','addressId','property'],
        'finishedOrder' => ['orderId'],
        'grounding' => ['dgId'],
        'goodsList' => ['goodsName'],
        'release' => ['goodsName','goodsImage','orderType','price','tags','contact','introduction','phone'],//发布
        'qiangShopping' => ['goodsName','price','goodsImage','tags','contact','publish_area'],    //闪购
        'teamShopping' => ['goodsName','goodsImage','tags','price','contact','maxBuyer','winner','publish_area'],  //团购
        'placeOrder' =>['dgId','addressId','consignee','user_tel'], //下单
        'goodSwitch' => ['dgId','status'], //上下架
        'modifyRewardGood' => ['dgId','goodsName','goodsImage','status','price','introduction','phone','tags','property'], //编辑奖购
        'modifyTeamGood' =>['dgId','goodsName','goodsImage','status','price','introduction','phone','tags','maxBuyer','winner'],//编辑团购
        'modifyQiangGood' => ['dgId','goodsName','goodsImage','status','price','introduction','phone','tags'],//编辑闪购
        'goodsDetail' => ['dgId'] , //订单详情
        'teamList' => ['dgId'], //卖出-团购-团购详情
        'teamOrderDetail' => ['goodId'] , // 卖出-团购-收货信息
        'teamDetail' => ['team_id']
    ];


}

封装的BaseValidate  :

<?php

namespace app\daogou\validate;


use think\Validate;

class BaseValidate extends Validate
{

    // 自定义的验证 内置规则没有json
    protected function json($value,$rule,$param){
        $isJson = json_decode($value,true);
        if($isJson){
            return true;
        }else{
            return false;
        }
    }

    protected function string($v,$r,$p){
        if(!is_string($v)){
            return false;
        }else{
            return true;
        }

    }


}

validate:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace think;

use think\exception\ClassNotFoundException;
use think\validate\ValidateRule;

class Validate
{

    /**
     * 自定义验证类型
     * @var array
     */
    protected static $type = [];

    /**
     * 验证类型别名
     * @var array
     */
    protected $alias = [
        '>' => 'gt', '>=' => 'egt', '<' => 'lt', '<=' => 'elt', '=' => 'eq', 'same' => 'eq',
    ];

    /**
     * 当前验证规则
     * @var array
     */
    protected $rule = [];


    /**  











    /**
     * 数据自动验证
     * @access public
     * @param  array     $data  数据
     * @param  mixed     $rules  验证规则
     * @param  string    $scene 验证场景
     * @return bool
     */
    public function check($data, $rules = [], $scene = '')
    {
        $this->error = [];

        if (empty($rules)) {
            // 读取验证规则
            $rules = $this->rule;
        }

        // 获取场景定义
        $this->getScene($scene);

        foreach ($this->append as $key => $rule) {
            if (!isset($rules[$key])) {
                $rules[$key] = $rule;
                unset($this->append[$key]);
            }
        }

        foreach ($rules as $key => $rule) {
            // field => 'rule1|rule2...' field => ['rule1','rule2',...]
            if (strpos($key, '|')) {
                // 字段|描述 用于指定属性名称
                list($key, $title) = explode('|', $key);
            } else {
                $title = isset($this->field[$key]) ? $this->field[$key] : $key;
            }

            // 场景检测
            if (!empty($this->only) && !in_array($key, $this->only)) {
                continue;
            }

            // 获取数据 支持多维数组
            $value = $this->getDataValue($data, $key);

            // 字段验证
            if ($rule instanceof \Closure) {
                $result = call_user_func_array($rule, [$value, $data, $title, $this]);
            } elseif ($rule instanceof ValidateRule) {
                //  验证因子
                $result = $this->checkItem($key, $value, $rule->getRule(), $data, $rule->getTitle() ?: $title, $rule->getMsg());
            } else {
                $result = $this->checkItem($key, $value, $rule, $data, $title);
            }

            if (true !== $result) {
                // 没有返回true 则表示验证失败
                if (!empty($this->batch)) {
                    // 批量验证
                    if (is_array($result)) {
                        $this->error = array_merge($this->error, $result);
                    } else {
                        $this->error[$key] = $result;
                    }
                } else {
                    $this->error = $result;
                    return false;
                }
            }
        }

        return !empty($this->error) ? false : true;
    }





测试:

打印获取的参数:

 public function teamDetail(){
       if(request()->isGet()){
           $team_id = $this->request->get('team_id', '');


           dump($team_id);die();
           $this->validate->scene('teamDetail')->check($team_id);
           if ($this->validate->getError()) {
               return resultArray(lang(strval($this->validate->getError())));
           }
           $page = $this->request->param('page', '1');
           $limit = $this->request->param('limit', '10');
           return $this->logic->teamDetail($team_id,$page,$limit);
       }
       return '';
    }

 

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/251219.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matcap的原理和应用

一、概念和原理 2.1 什么是Matcap 什么是Matcap&#xff1f;Matcap实际上是Material Capture的缩写&#xff0c;即材质捕捉。实际上&#xff0c;这是一种离线渲染方案。类似光照烘焙&#xff0c;将光照或者其它更复杂环境下的渲染数据存储到一张2D贴图上&#xff0c; 再从这张…

Python读写arxml文件

文章目录 前言一、XML简介二、XML文件结构三、Python读取xml文件安装ElementTree库读取xml文件四、Python写入xml文件前言 本文主要通过介绍arxml文件,为后续python脚本开发奠定基础。 arxml是AUTOSAR XML的简称,是一个通用的配置/数据库文件,实质是一个xml文件。 ①更规范…

Swin-Transformer 在图像识别中的应用

1. 卷积神经网络简单介绍 图像识别任务主要利用神经网络对图像进行特征提取&#xff0c;最后通过全连接层将特征和分类个数进行映射。传统的网络是利用线性网络对图像进行分类&#xff0c;然而图像信息是二维的&#xff0c;一般来说&#xff0c;图像像素点和周围邻域像素点相关…

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的&#xff0c;节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色&#xff1a;master 和 node。 master 节点&#xff1a;master 节点负责控制和管理整个集群…

iPhone 与三星手机:哪一款最好?

三星比苹果好吗&#xff1f;还是苹果比三星更好&#xff1f; 小米公司如何称霸全球智能手机市场&#xff1f;小米公司&#xff0c;由雷军创立于2010年&#xff0c;是一家领先的电子巨头。以其MIUI系统和互联网服务闻名&#xff0c;小米公司在全球智能手机市场中稳居前列。小米…

Mybatis 动态SQL的插入操作

需求 : 根据用户的输入情况进行插入 动态SQL:根据需求动态拼接SQL 用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空 insert into userinfo(username,password,age,gender,phone) values(?,?,?,?,?); insert into userinfo(username,…

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM)&#xff0c;这是一组经过预训练和微调的生成文本模型&#xff0c;参…

NVIDIA A100 PCIE 40GB k8s-device-plugin install in kubernetes

文章目录 1. 目标2. 简介2.1 英伟达 A100 技术规格2.2 架构优势2.3 显卡跑分对比2.4 英伟达 A100 与 kubernetes 3. 安装 NVIDIA A100 GPU 40G 硬件4. NVIDIA R450 datacenter driver5. NVIDIA Container Toolkit6. 创建 runtimeclass5. MIG Strategies6. 配置仓库7. 下载镜像8…

深度学习——第6章 浅层神经网络(NN)

第6章 浅层神经网络&#xff08;NN&#xff09; 目录 6.1 神经网络模型概述 6.2 神经网络正向传播 6.3 神经网络反向传播 6.4 W和b的初始化 6.5 总结 上一课主要介绍了一些神经网络必备的基础知识&#xff0c;包括Sigmoid激活函数、损失函数、梯度下降和计算图。这些知识对…

Linux 中使用 docker 安装 Elasticsearch 及 Kibana

Linux 中使用 docker 安装 Elasticsearch 及 Kibana 安装 Elasticsearch 和 Kibana安装分词插件 ik_smart 安装 Elasticsearch 和 Kibana 查看当前运行的镜像及本地已经下载的镜像&#xff0c;确认之前没有安装过 ES 和 Kibana 镜像 docker ps docker images从远程镜像仓库拉…

Domino万物可订阅

大家好&#xff0c;才是真的好。 如果你还不知道什么是RSS&#xff0c;从V站截图一份放到这里供大家参考&#xff1a; 其实&#xff0c;Domino上也可以很简单地发布RSS站点&#xff0c;以供内部或外部用户订阅。 前面其实我们说了不少关于Notes客户端的RSS订阅功能&#xff…

Redis设计与实现之字符串哈希表列表

目录 一、字符串 1、字符串编码 2、编码的选择 二、哈希表 1、字典编码的哈希表 2、压缩列表编码的哈希表 3、编码的选择 4、哈希命令的实现 三、列表 1、 编码的选择 2、 列表命令的实现 3、阻塞的条件 4、 阻塞 5、 阻塞因 LPUSH 、RPUSH 、LINSERT 等添加命令而…

【MySQL】(DDL) 数据类型 和 表操作-修改 删除

目录 介绍&#xff1a; 1.数值类型 3.日期类型 修改表&#xff1a; 示列&#xff1a; 介绍&#xff1a; 在之前建表语句内&#xff0c;用到了 int cvarchar &#xff0c;那么在mysql内除了 以上的数据类型 还有那些常见数据类型 mysql 中的数据类型有很多种 &#xff0c…

QML 自定义进度条组件开发

一、效果预览 二、介绍&#xff1a; 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

C++实现简单的猜数字小游戏

猜数字 小游戏介绍&#xff1a;猜数字游戏是令游戏机随机产生一个100以内的正整数&#xff0c;用户输入一个数对其进行猜测&#xff0c;需要你编写程序自动对其与随机产生的被猜数进行比较&#xff0c;并提示大了&#xff0c;还是小了&#xff0c;相等表示猜到了。如果猜到&…

Appium —— 初识移动APP自动化测试框架Appium

说到移动APP自动化测试&#xff0c;代表性的测试框架非Appium莫属&#xff0c;从今天开始我们将从APP结构解析、Appium框架学习、安卓/iOS自动化测试实战、自动遍历回归测试、自动化测试平台及持续集成&#xff0c;多个维度一起由浅入深的学废Appium 今天我们先来初步认识Appi…

nodejs+vue+微信小程序+python+PHP运动项目推荐系统-计算机毕业设计推荐

运动项目推荐系统的整体架构确定以后&#xff0c;再来看运动项目推荐系统的主要功能模块图。整体的功能模块包括前台和后台&#xff0c;前台只要实现了注册用户功能&#xff0c;主要的页面&#xff0c;包括首页&#xff0c;体育资讯&#xff0c;体育项目&#xff0c;公告信息等…

基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建医学场景下细胞分割检测识别系统,以【BCC、DSB2018数据集为基准】

作者提出了一种新的基于注意尺度序列融合的YOLO框架&#xff08;ASF-YOLO&#xff09;&#xff0c;该框架结合了空间和尺度特征&#xff0c;实现了准确快速的细胞实例分割。基于YOLO分割框架&#xff0c;我们使用尺度序列特征融合&#xff08;SSFF&#xff09;模块来增强网络的…

pybind11:对比C++和Python解线性方程组的速度

前言 上篇博客介绍了如何在用pybind11实现ndarray和C数组的转换自由&#xff0c;pybind11&#xff1a;实现ndarray转C原生数组&#xff08;没看过的朋友可以去看一看&#xff09;下面我们以一个实际的算法例子演示一下如何使用这个技术&#xff0c;方便的实现 Python 调用 C 写…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat

Tomcat下载官网&#xff1a; Apache Tomcat - Which Version Do I Want? JDK下载官网&#xff1a; Java Downloads | Oracle 中国 如果不知道Tomcat的哪个版本应该对应哪个版本的JDK可以打开官网&#xff0c;点击Whitch Version 下滑&#xff0c;有低版本的&#xff0c;如…
最新文章