首页 > 解决方案 > 使用 Slim Framework (v4) 中间件时出错

问题描述

我试图middleware在我的中使用 aSlim route但我有一个错误:

致命错误:未捕获的 ArgumentCountError:函数 Api\Middleware\Auth::__invoke() 的参数太少,通过了 2 个

我正在努力:

索引文件

<?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);
  }
}

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

标签: phpapislim

解决方案


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

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

它应该如下所示:

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

推荐阅读