Slim3 不能使用 Slim\Http\Response 类型的对象作为数组

Posted

技术标签:

【中文标题】Slim3 不能使用 Slim\\Http\\Response 类型的对象作为数组【英文标题】:Slim3 Cannot use object of type Slim\Http\Response as arraySlim3 不能使用 Slim\Http\Response 类型的对象作为数组 【发布时间】:2019-12-09 09:46:09 【问题描述】:

我在将错误输出添加到 JWT 中间件设置时遇到问题。

我收到此错误:Cannot use object of type Slim\Http\Response as array

我正在使用 Slim 3 和 slim-jwt-auth 包,我正在使用在 https://github.com/tuupola/slim-jwt-auth#error 找到的文档中的示例代码

不同之处在于我调用的是\Slim\Middleware\JwtAuthentication 而不是Tuupola\Middleware\JwtAuthentication。如果我使用该类,则找不到该类。一切正常,直到我想将错误输出添加到中间件设置中,这是我的代码:

    $app->add(new \Slim\Middleware\JwtAuthentication([
    "path" => "/mypath",
    "passthrough" => "/mypath/get-auth",
    "secret" => getenv("SKEY"),
    "secure" => false,
    "error" => function ($response, $args) 
      $data = array();
      $data["status"] = "error";
      $data["message"] = $args["message"];
      return $response
        ->withHeader("Content-Type", "application/json")
        ->getBody()->write(
         json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); 
      
    ]));

错误输出表明它来自$data["message"] = $args["message"];

我是否正视问题而没有看到它?

【问题讨论】:

可能是因为$argsSlim\Http\Response 而不是array 实际上不应该是“错误”的签名"error" => function ($request, $response, $args) ? @jDolba - 你是对的,这就是问题所在 - 谢谢 【参考方案1】:

"error" 闭包的函数签名是:

function ($request, $response, $args): Response

您的代码中缺少第一个参数,因此当您使用$args 时,您将获得Response 对象。

【讨论】:

以上是关于Slim3 不能使用 Slim\Http\Response 类型的对象作为数组的主要内容,如果未能解决你的问题,请参考以下文章

Slim3 - 容器:找不到类

使用 Eloquent ORM 使用 Twig 视图进行 Slim 3 分页

Slim 3 + Doctrine 2:“用户”类不存在,MappingException

Slim 3 - 如何获取所有 get/put/post 变量?

Slim 3.8 框架无法路由

手动安装Slim 3.x.