背景
我在控制器中注册了中间件用于token验证。
protected $middleware = [
'CheckToken' => ['except' => ['_empty']], //验证 token
];
现象
然后不管访问哪个操作action,都会先进入CheckToken中间件里面进行验证。
目的
我想在CheckToken里先判断一下当前访问的action是否存在,如果存在才真正去验证token,action不存在直接返回错误信息。
难点
搜索发现有个方法可以检查方法是否存在。
method_exists($this, $act)
,但在中间件中的
$this
并非用户访问的那个控制器,所以这里不就不知道怎么写了。
class CheckToken
{
/**
* 验证 Token
* @param $request
* @param \Closure $next
* @return mixed|\think\response\Json
*/
public function handle($request, \Closure $next)
{
//TODO:如何验证action是否存在
$act = $request->action(); //请求的操作
$isExists = method_exists($this, $act); //TODO:这里的 $this 如何设置
dump($isExists);
$checkResult = valid_token();
if ($checkResult != '') {
return error($checkResult);
}
return $next($request);
}
}
吐槽
ThinkPHP 的官方社区真是让人无语,提问就没人搭理,冷清的要死,做完手头这个项目就把 ThinkPHP 扔掉。
参考
原问题链接
还有一个问题没人搭理