猿问

使用 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);

  }

}

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


茅侃侃
浏览 120回答 1
1回答

慕勒3428872

根据您在 Slim 中链接的中间件的文档,要么是带有两个参数的函数,要么是带有带有__invoke两个参数的魔术方法的对象。传递的参数是Psr\Http\Message\ServerRequestInterface和Psr\Http\Server\RequestHandlerInterface。您的中间件实现需要 3 个参数。它应该如下所示:class Auth {&nbsp; &nbsp; public function __invoke($request, $handler) {&nbsp; &nbsp; &nbsp; &nbsp; echo "Middleware";&nbsp; &nbsp; &nbsp; &nbsp; return $handler->handle($request);&nbsp; &nbsp; }}
随时随地看视频慕课网APP
我要回答