【问题标题】:How can multiple method calls be chained on slim's response object?多个方法调用如何链接到 slim 的响应对象上?
【发布时间】:2019-08-06 17:51:20
【问题描述】:

我想在 slims 的 $response 对象上链接多个方法调用,但如果我这样做了,我会收到一个错误(状态 500)并且没有任何反应。 这也可能是缺乏基本的 PHP 知识,我在 PHP 方面不是很有经验,这是我第一次使用 slim 或任何服务器端/API 框架。

我尝试过颠倒呼叫的顺序,并在不同的行中进行,但没有成功。长期目标是为更新应用程序构建 API。所以我将不得不处理带有多个参数的 get 请求,评估它们并根据结果,执行并返回不同的响应。

// this one fails, i set the status to 900 on purpose just to see what happens
$app->get('/', function (Request $request, Response $response, array $args) {
    $response->getBody()->write("Slim main page")->withStatus(900);
    return $response;
});

第一个示例确实在网络选项卡上给了我一个 500 错误。我猜这会暗示某种类型的语法错误?如果我稍微改变这条路线看起来像这样:

# this one works fine, except the status code setting gets ignored, but why?
$app->get('/', function (Request $request, Response $response, array $args) {
    $response->write("Slim main page")->withStatus(900);
    return $response;
});

事情几乎成功了,但由于某种原因没有设置状态码。

我希望第一个返回字符串“slim main page”,状态码为 900。即使我使用非编造的状态码,此设置也会被忽略。

第二个代码块只是为了测试目的而做的改动。

我很确定这是一个新事物,但我真的迷失了在这里,所以任何建议,或者除了苗条的文档之外的一些万无一失的文章/文档都值得赞赏。

【问题讨论】:

  • 据我所知,我没有使用任何中间件,我有一个最小的 php 服务器,基本上只有包含所示代码的 php 文件,以及一些其他实验功能。但是我打开了错误日志并得到了这个:消息:调用整数上的成员函数 withStatus()
  • 现在我知道出了什么问题。请看我的回答。

标签: php api slim


【解决方案1】:

write 方法返回写入流的字节数(而不是新的响应对象)。试试这个:

$app->get('/', function (Request $request, Response $response, array $args = []) {
    $response->getBody()->write('Slim main page');
    $response = $response->withStatus(200);

    return $response;
});

注意1:在dev:'displayErrorDetails' => true启用错误详情

注意 2:HTTP 代码 900 是 Slim 的无效状态代码,将抛出以下 execption。

Type: InvalidArgumentException
Message: Invalid HTTP status code
File: vendor/slim/slim/Slim/Http/Response.php
Line: 228

【讨论】:

  • 如果我相应地更改代码,我会收到一个错误,说明我的状态代码无效。我把状态码改成400,应用正常,但是浏览器显示的状态码还是200
  • 我想我明白了,$response 对象是不可变的,所以如果想改变一些东西,比如状态码,我需要创建一个对象的新实例php $response->getBody()->write("Slim main page"); $test = $response->withStatus(401); $response->write($response); return $test; 现在该站点显示来自 $response 的旧 200 代码,但浏览器本身说它是 401 仍然将您的回答标记为已接受,因为您让我走上了正确的轨道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多