我有来自我的Slim-3中间件的代码,如何将它转换成Slim-4中间件。在slim4中,我们需要返回一些响应,而不是返回可调用的$next
//route middleware
$app->add(function (Request $request, Response $response, callable $next) {
$public = array(
"ping",
"guest",
"login",
"api-login",
"logout"
);
$route = $request->getAttribute('route');
// return NotFound for non existent route
if (empty($route)) {
throw new NotFoundException($request, $response);
}
$name = $route->getName();
//if route is not public, then
// - get bearer token from authorization header / httponly cookie
// - validate jwt token
if (!in_array($name, $public)) {
//get token status from cookie token
$tokenStatus = checkTokenStatus();
if (!$tokenStatus) {
//redirect to guest page
return $response->withRedirect('/login');
}
}
return $next($request, $response);
});发布于 2022-08-03 02:30:37
根据文档
您需要将函数参数更改为:
function(Request $request, RequestHandler $handler)然后通过以下方式返回响应:
$response = $handler->handle($request);
return $response;https://stackoverflow.com/questions/72507348
复制相似问题