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

news2024/9/25 9:36:21

控制器:

    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.coloradmin.cn/o/1315168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm金旗帜文化培训学校网站的设计与开发论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对培训学校展示信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

SpringBoot Starter机制(自定义Start案例,实际开发场景中的短信模拟,AOP实现日志打印)

前言&#xff1a; 在我们上一篇博客中&#xff0c;实现Freemarke的增删改查&#xff0c;今天分享的是关于SpringBoot Starter机制-- 1.SpringBoot Starter 1.1.什么是SpringBoot Starter SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂…

Spring MVC开发流程

1.Spring MVC环境基本配置 Maven工程依赖spring-webmvc <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version> </dependency>web.xml配置Dispatche…

ubuntu安装详细步骤

一&#xff0c;先下载vmware 1&#xff0c;第一步打开上面链接 下载网址 : https://www.vmware.com/products/workstation-pro/wo rkstation-pro-evaluation.html 许可证 JU090-6039P-08409-8J0QH-2YR7F ZF3R0-FHED2-M80TY-8QYGC-NPKYF FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6 ZC3T…

【数据结构第 6 章 ④】- 用 C 语言实现图的深度优先搜索遍历和广度优先搜索遍历

目录 一、深度优先搜索 1.1 - 深度优先搜索遍历的过程 1.2 - 深度优先搜索遍历的算法实现 二、广度优先搜索 2.1 - 广度优先搜索遍历的过程 2.2 - 广度优先搜索遍历的算法实现 和树的遍历类似&#xff0c;图的遍历也是从图中某一顶点出发&#xff0c;按照某种方法对图中所…

6.23删除二叉搜索树中的节点(LC450-M)

算法&#xff1a; 一共有五种可能的情况&#xff1a; 第一种情况&#xff1a;没找到删除的节点&#xff0c;遍历到空节点直接返回了找到删除的节点 第二种情况&#xff1a;左右孩子都为空&#xff08;叶子节点&#xff09;&#xff0c;直接删除节点&#xff0c; 返回NULL为根…

鸿蒙4.0开发 - DevEco Studio如何使用Previewer窗口预览器报错

DevEco Studio预览器概况在HarmonyOS应用开发过程中&#xff0c;通过使用预览器&#xff0c;可以查看应用的UI效果&#xff0c;方便开发者实时查看应用的运行效果&#xff0c;随时调整代码。 1.正常启动 打开预览器的位置在DevEco Studio编辑界面的右上角部分&#xff0c;竖排…

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存1&#xff09;模型训练2&#xff09;模型保存 4. 模型生成1&#xff09;模型导入及调用2&#xff09;相关代码&#xff08;1&#xff09;布局文件&#xff08;2&#xff…

独立站低成本流量:优化用户体验,实现精准营销

在当今的数字化时代&#xff0c;获取流量是每个网站成功的关键。然而&#xff0c;随着竞争的加剧&#xff0c;流量获取的成本也在逐渐上升。对于许多独立站来说&#xff0c;如何低成本的获取流量变得越来越具有挑战性。本文Nox聚星将和大家探讨独立站如何通过网站优化和精准营销…

云演CTF Blog

1、啥也搞不了&#xff0c;扫目录。出来个console 2、有显示锁掉了 3、抓包&#xff0c;改返回包 改成true&#xff0c;放包 不好意思&#xff0c;不会了&#xff0c;哈哈哈哈哈哈哈哈哈 你会的话&#xff0c;请告诉我&#xff0c;大佬

软实力篇---第四篇

系列文章目录 文章目录 系列文章目录前言一、你对我们公司有什么想问的吗?二、很多人都倒在自我介绍上三、如何与 HR 交谈,如何谈薪水前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就…

docker consul容器的自动发现与注册

一、微服务&#xff08;容器&#xff09;的注册与发现——微服务架构中极其重要的组件 1、定义&#xff1a;是一种分布式管理系统以及定位服务的方法。传统架构中&#xff0c;应用程序之间直连到已知的服务&#xff0c;设备提供的网络&#xff08;IP地址&#xff09;&#xff…

揭开机器学习转换器架构的神秘面纱

自2017年推出以来&#xff0c;转换器&#xff08;Transformers&#xff09;已成为机器学习领域的一支突出力量&#xff0c;彻底改变了专业翻译和自动完成服务的能力。 最近&#xff0c;随着OpenAI公司的ChatGPT和Meta公司的LLama等大型语言模型的出现&#xff0c;转换器的受欢…

保障线程安全性:构建可靠的多线程应用

目录 引言 为什么线程安全性如此重要&#xff1f; 1. 竞态条件&#xff08;Race Conditions&#xff09; 2. 死锁&#xff08;Deadlocks&#xff09; 3. 数据竞争&#xff08;Data Races&#xff09; 4. 内存可见性&#xff08;Memory Visibility&#xff09; 面临的挑战…

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP&#xff08;Pretty Good Privacy&#xff09; PGP是一种邮件加密手段&#xff0c;他在发邮件一方加密&#xff0c;然后发给发送方邮件服务器&#xff0c;发送方邮件服务器再发送给接收方邮件服务器&#xff0c;然后接收方再从接收方邮件服务器pop出来&#xff0c;这整…

Axure动态面板的应用与ERP系统登录界面、主页左侧菜单栏、公告栏的绘制

目录 一、动态面板 1.1 简介 1.2 使用动态面板的原因 二、动态面板之轮播图实现案例 2.1 完成步骤 2.2 最终效果 三、动态面版之多方式登录案例 四、动态面板之后台主界面左侧菜单栏 五、ERP登录界面 六、ERP主界面菜单栏 七、ERP公告栏 八、登录页面跳转公告栏 一…

OpenAI开源超级对齐方法:用GPT-2,监督、微调GPT-4

12月15日&#xff0c;OpenAI在官网公布了最新研究论文和开源项目——如何用小模型监督大模型&#xff0c;实现更好的新型对齐方法。 目前&#xff0c;大模型的主流对齐方法是RLHF&#xff08;人类反馈强化学习&#xff09;。但随着大模型朝着多模态、AGI发展&#xff0c;神经元…

【专栏目录】

摘要 本专栏是讲解如何改进RT-DETR的专栏。改进方法采用了最新的论文提到的方法。改进的方法包括&#xff1a;增加注意力机制、更换卷积、更换block、更换backbone、更换head、更换优化器等&#xff1b;每篇文章提供了一种到N种改进方法。 评测用的数据集是我自己标注的数据集…

【设计模式--行为型--中介者模式】

设计模式--行为型--中介者模式 中介者模式定义结构案例实现优缺点使用场景 中介者模式 定义 又叫调停模式&#xff0c;定义一个中介角色来封装一系列对象之间的交互&#xff0c;使原有对象之间的耦合松散&#xff0c;且可以独立的改变它们之间的交互。 结构 抽象中介者角色…

【Vue】elementUI表格,导出Excel

系列文章 【Vue】vue增加导航标签 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue&#xff0c;在Windows IIS平台…