如何在苗条的响应对象上链接多个方法调用?

时间:2019-08-06 08:12:00

标签: php api slim

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

我尝试过翻转所有呼叫的顺序,并以不同的方式进行呼叫,但都没有发现。从长远来看,为更新应用程序构建API。因此,我将不得不处理具有多个参数的get请求,对它们进行评估并根据结果进行处理,并返回deffirent响应。

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

几乎可以解决问题,但是由于某种原因未设置状态代码。

我希望第一个返回状态代码为900的字符串“ slim主页”。即使我使用的是非组合状态代码,也会忽略此设置。

第二个代码块仅是出于测试目的的更改。

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

1 个答案:

答案 0 :(得分:1)

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

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

    return $response;
});

注意1:在开发人员上启用错误详细信息:'displayErrorDetails' => true

注意2:HTTP代码900是Slim的无效状态代码,将引发以下执行。

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