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实现路由中间件来判断参数是否符合要求的代码