我正在尝试在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,但无法修复该错误。
根据您在Slim中链接中间件的文档,或者是带有两个参数的函数,或者是带有__invoke
魔术方法的对象带有两个参数的对象。传递的参数为Psr\Http\Message\ServerRequestInterface
和Psr\Http\Server\RequestHandlerInterface
。
您对中间件的实现需要3个参数。
应该看起来像这样:
class Auth {
public function __invoke($request, $handler) {
echo "Middleware";
return $handler->handle($request);
}
}