【问题标题】:Error using Slim Framework (v4) Middleware使用 Slim Framework (v4) 中间件时出错
【发布时间】:2020-01-08 21:24:50
【问题描述】:

我正在尝试在我的Slim route 中使用middleware,但出现错误:

致命错误:未捕获的 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】:

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

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

    应该是这样的:

    class Auth {
        public function __invoke($request, $handler) {
            echo "Middleware";
            return $handler->handle($request);
        }
    }
    
    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2021-03-30
    • 2019-07-22
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多