使用Middleware的Slim \\ Route :: __ invoke()不接受正确的$ request& $响应

时间:2016-08-22 13:16:10

标签: php slim middleware

我目前正在使用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;
    }

}

我收到以下错误:

  

传递给Slim \ Route :: __ invoke()的参数1必须实现接口Psr \ Http \ Message \ ServerRequestInterface,Slim \ Http \ Response实例给出

在以下一行:

$response = $next($response, $request);

发生了什么事?有任何想法吗?我已经在这吃了2个小时了:(

非常感谢!

1 个答案:

答案 0 :(得分:4)

愚蠢......我注意到了

$response = $next($response, $request);

我颠倒了参数..应该是

$response = $next($request, $response);

Blaahh ......我的头疼。