php - 使用 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);
}
}
我正在阅读和复制文档,但无法修复该错误。
解决方案
根据您在 Slim 中链接的中间件的文档,要么是带有两个参数的函数,要么是带有带有__invoke
两个参数的魔术方法的对象。传递的参数是Psr\Http\Message\ServerRequestInterface
和Psr\Http\Server\RequestHandlerInterface
。
您的中间件实现需要 3 个参数。
它应该如下所示:
class Auth {
public function __invoke($request, $handler) {
echo "Middleware";
return $handler->handle($request);
}
}
推荐阅读
- gmail - Gmail 促销标签注释是否会影响收件箱递送?
- php - 在rest api中合并数组以响应
- solidity - VM out of Gas Exception 试图调用属于其他合约的函数
- android - BottomNavigationView 不在底部显示,而是在顶部显示
- mongodb - 尝试为 Hyperledger composer 项目启用 JWT 时出错
- java - 在 Redis 中存储 Web Socket 会话
- angular - Angular 无法分配给只读属性
- javascript - 如何将外部 js 文件集成到 Angular 6 中。特别是将 Angular 质粒集成到 Angular 6 中
- php - 无法通过 XAMMP 使用 PHP 连接到 Oracle Database 11g
- php - 使用 CURL 向 SSL 认证域发送 post 请求