使用的是thinkphp的框架,由于项目比较小,在控制器中写接口的时候没有使用到validate校验器
然后我是直接这样写的
$token = $this->request->header('token');
$mode = $this->request->post('mode');
$question = $this->request->post('question');
if (!isset($code, $mode, $question)) {
xxx
}
isset的作用按原文档是这样说的
isset
(PHP 4, PHP 5, PHP 7, PHP 8)
isset — 检测变量是否已设置并且非 NULL
说明
isset ( mixed ... ] ) : bool
检测变量是否设置,并且不是 NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。
如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止
this->request->header("token"); 我这段代码如果不传就会返回一个""
空但不为NULL,
这样如果用户没有传这几个参数,这个检测也会失效
同时在empty中也会导致识别不到。
所以最稳妥的解决方案就是直接 !code .... 直接取反可以有较好的效果