我目前正在使用Slim Framework 3编写REST API,并实现用于基本身份验证的中间件。
我的路由像这样:
$app->group('/api', function () use ($app, $pdo) {
$this->group('/v1', function () use ($app, $pdo) {
// Guest Routes
$this->group('', function() use ($app, $pdo) {
require_once '../app/api/v1/authentication.php';
});
// Authenticated Routes
$this->group('', function() use ($app, $pdo) {
require_once '../app/api/v1/test.php';
})->add(new 'App'Middleware'AuthMiddleware($pdo));
});
});
在AuthMiddleware类中,我使用__invoke方法如下:
namespace App'Middleware;
use 'Psr'Http'Message'ServerRequestInterface as Request;
use 'Psr'Http'Message'ResponseInterface as Response;
class AuthMiddleware extends Middleware {
/**
* @param Request $request
* @param Response $response
* @param $next
* @return Response
*/
public function __invoke(Request $request, Response $response, $next) {
$response = $next($response, $request);
return $response;
}
}
我得到以下错误:
参数1传递给Slim'Route::__invoke()必须实现接口Psr'Http'Message'ServerRequestInterface, Slim'Http'Response给出的实例
$response = $next($response, $request);
发生了什么事?什么好主意吗?我已经为这件事纠结了两个小时了
多谢了!
愚蠢…我注意到在
上$response = $next($response, $request);
我颠倒了参数…应该是
$response = $next($request, $response);
Blaahh……我头疼。