使用 Slim Framework (v4) 中间件时出错

Error using Slim Framework (v4) Middleware

我正在尝试在我的 Slim route 中使用 middleware,但出现错误:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Api\Middleware\Auth::__invoke(), 2 passed

我正在尝试:

索引文件

<?php

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

use Api\Middleware\Auth;

require __DIR__ . '../../../vendor/autoload.php';

$app = AppFactory::create();

$app->add(new Auth);

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Start Project");
    return $response;
});

$app->run();

中间件文件

<?php

namespace Api\Middleware;

class Auth {
  public function __invoke($request, $response, $next) {
    echo "Middleware";
    return $next($request, $response);
  }
}

我正在阅读和复制 docs 但无法修复该错误。

根据您链接的文档,Slim 中的中间件要么是接受两个参数的函数,要么是具有接受两个参数的 __invoke 魔术方法的对象。传递的参数是 Psr\Http\Message\ServerRequestInterfacePsr\Http\Server\RequestHandlerInterface

您的中间件实现需要 3 个参数。

它应该是这样的:

class Auth {
    public function __invoke($request, $handler) {
        echo "Middleware";
        return $handler->handle($request);
    }
}