超薄 JSON 输出

2022-08-30 14:20:15

我正在使用Slim框架和PHP为我的应用程序创建一个RESTful API。但是,我认为该框架将有某种方法来创建更简单的JSON输出,而不仅仅是。exit($jsonEncodedVariable);

我是否在框架中遗漏了一些东西,或者我需要使用...对于每种方法?json_encode()exit($json)

所有数据都从我的MySQL数据库中取出,然后根据调用的REST请求将其放入JSON数组中。

例如,如果被要求,我会一个JSON数组,其中包含所有帖子,每个帖子都有自己的键,./api/posts/allexit()"value" : key

我的问题是,有没有一种简单的方法,使用苗条的框架,来“JSON代码,而不是以纯文本的形式退出它?exit()


答案 1

为什么不直接使用 Slim 的 Response Object 呢?(也...为什么要退出?

$dataAry = // Some data array

$response = $app->response();
$response['Content-Type'] = 'application/json';
$response['X-Powered-By'] = 'Potato Energy';
$response->status(200);
// etc.

$response->body(json_encode($dataAry));
// Or echo json_encode($dataAry)

首先我要说,我仍然认为自己是一个菜鸟,所以如果我犯了错误,请纠正我,这样我就可以学习了。但是,我正在玩一个类似的问题/问题,我想我可能会加入2美分,并存档更多关于此事的讨论。关于Slim on Stack的信息越多越好。

我基本上是在玩同样的事情,我注意到你正在使用出口;起初,我使用exit也是因为echo包含一堆HTML,并搞砸了返回给我的AJAX调用的内容。当我使用exit时,它干净利落地删除了HTML,但随后Slim响应对象没有像我定义的那样更改响应标头(请参阅上面的代码)。

我意识到,这不是Slim的设计方式。使用回声,而不是退出。注意 - 苗条文档:

每当从路由回调中 echo() 内容时,echo() 的内容都会>输出缓冲区中捕获,并在 HTTP 响应>返回给客户端之前追加到响应正文中。

这很方便,但我无法回声。我搞砸的是一个更大的问题。内容与行为的分离。如果你像我一样,你正在设置一个单页应用程序,其中此代码基本上位于索引.php上。我需要加载初始html,因此我将其包含在该页面上。我需要做的是创造一个更清洁的分离。我的路由设置正确,因此当人们获得“/”时,Slim_Views(请参阅Develop Rel.)会为我返回html和js的渲染模板。明!

现在我有了Slim的所有工具,我的代码更干净,独立,可管理,并且更符合http协议。我想这就是框架的用途。:-)

注意:我并不是说所有这些都是你这边发生的事情,但我认为这个问题和你的设置似乎非常相似。它可能会帮助另一个在同样道路上徘徊的新人。

更新:正如@alttag提到的,这个答案已经过时了(Slim 2)

对于 Slim3,请参阅下面的答案或查看文档中的此页面


答案 2
header("Content-Type: application/json");
echo json_encode($result);
exit;

提示:使用精简 PHP 框架开发 REST API


推荐