Slim\\Route::__invoke() with Middleware 不接受正确的 $request & $response
Slim\\Route::__invoke() with Middleware is not accepting the right $request & $response
我目前正在使用 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 class 中,我按以下方式使用 __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;
}
}
我收到以下错误:
Argument 1 passed to Slim\Route::__invoke() must implement interface Psr\Http\Message\ServerRequestInterface, instance of Slim\Http\Response given
在以下行中:
$response = $next($response, $request);
这是怎么回事?有任何想法吗?我已经为此烦恼了 2 个小时:(
非常感谢!
愚蠢的..我注意到
$response = $next($response, $request);
我把参数反了..应该是
$response = $next($request, $response);
呜呜呜……头好痛
我目前正在使用 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 class 中,我按以下方式使用 __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;
}
}
我收到以下错误:
Argument 1 passed to Slim\Route::__invoke() must implement interface Psr\Http\Message\ServerRequestInterface, instance of Slim\Http\Response given
在以下行中:
$response = $next($response, $request);
这是怎么回事?有任何想法吗?我已经为此烦恼了 2 个小时:(
非常感谢!
愚蠢的..我注意到
$response = $next($response, $request);
我把参数反了..应该是
$response = $next($request, $response);
呜呜呜……头好痛