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

发布时间:2023年12月19日

控制器:

    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 '';
    }

?

结果:

文章来源:https://blog.csdn.net/qq_51110402/article/details/135031653
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。