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

问题描述 投票:0回答:1

我正在尝试在middleware中使用Slim 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);
  }
}

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

php api slim
1个回答
0
投票

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

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

应该看起来像这样:

class Auth {
    public function __invoke($request, $handler) {
        echo "Middleware";
        return $handler->handle($request);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.