记一次tp6实现路由中间件验证传参是否符合要求

本文介绍了如何在ThinkPHP6(TP6)中利用路由中间件进行参数验证,通过编写业务代码和验证方法确保传入参数符合规定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TP6 路由中间件验证参数这里写自定义目录标题


一:通过 php think make:middleware Check 命令快速生成中间件

二:再生成的文件中编写业务代码

# public function handle($request, \Closure $next)
    {
        //获取当前参数
        $params = $request->param();
        //获取访问控制器和方法
        $method =$request->rule()->getName();
        //通过字符串分割,获取到具体的类文件和操作的方法名称
        $controller = substr($method,0,strpos($method,'@'));
        $scene = substr($method,strpos($method,'@')+1);
		//拼接验证类名,注意路径不要出错
        $validate = 'app\api\validate\\' . $controller.'Validate';
        //判断当前验证类是否存在
        if(class_exists($validate)){
            $v = new $validate;
			
            //仅当存在验证场景才校验
            if ($v->hasScene($scene)) {
                //设置当前验证场景
                $v->scene($scene);
                if (!$v->check($params)) {


                    //校验不通过则直接返回错误信息
                    return return_msg('-1',$v->getError());
                }
            }
        }
        return $next($request);
    }

三:再对应的文件下编写validate验证方法

<?php
declare (strict_types = 1);

namespace app\api\validate;

use think\Validate;

class UserValidate extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'stamp'  =>  'require',
        'type' => 'require|between:1,3',
        'page' => 'require|number'
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'stamp.require' => 'stamp参数不能为空',
        'type.require' => 'openid参数不能为空',
        'page.require' => 'nickname参数不能为空',
    ];


    //这里就是通过不同的场景,来使用不同的验证规则
    protected $scene = [
        'index'  =>  ['stamp'],
        'ProduceList' =>['stamp','type','page'],
        'ProduceDetail' =>['stamp','produce_id'],
    ];


}

以上就是通过tp6实现路由中间件来判断参数是否符合要求的代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值