如何将多个方法调用链接到 slim 的响应对象上?

How can multiple method calls be chained on slim's response object?

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

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

// 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;
});

事情差不多解决了,但是由于某种原因没有设置状态码。

我希望第一个 return 状态代码为 900 的字符串 "slim main page"。即使我使用非虚构的状态代码,此设置也会被忽略。

第二个代码块只是为了测试目的而进行的更改。

我很确定这是一个新手,但我真的迷失在这里,所以除了精简的文档之外,任何建议或一些简单的文章/文档都值得赞赏。

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

$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的无效状态码,会抛出如下异常。

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