使用 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\ServerRequestInterface
和 Psr\Http\Server\RequestHandlerInterface
。
您的中间件实现需要 3 个参数。
它应该是这样的:
class Auth {
public function __invoke($request, $handler) {
echo "Middleware";
return $handler->handle($request);
}
}
我正在尝试在我的 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\ServerRequestInterface
和 Psr\Http\Server\RequestHandlerInterface
。
您的中间件实现需要 3 个参数。
它应该是这样的:
class Auth {
public function __invoke($request, $handler) {
echo "Middleware";
return $handler->handle($request);
}
}