我正在使用超薄框架和PHP为我的应用程序创建一个RESTful应用程序接口。但是,我假设框架应该有某种方法来创建更简单的JSON输出,而不仅仅是exit($jsonEncodedVariable);。
我是不是在框架中遗漏了什么,或者我需要使用json_encode()... exit($json)...对于每种方法?
所有数据都从MySQL数据库中取出,然后根据调用的REST请求放入MySQL数组中。
例如,如果请求/api/posts/all,我将exit()一个包含所有帖子的JSON数组,每个帖子的值都是它自己的键"value" : key。
我的问题是,有没有一种简单的方法,使用slim框架,让exit()'ing JSON代码不是以纯文本的形式退出?
发布于 2011-07-24 22:46:27
header("Content-Type: application/json");
echo json_encode($result);
exit;提示:Using The Slim PHP Framework for Developing REST APIs
发布于 2012-01-31 16:02:53
为什么不直接使用Slim的响应对象呢?(还有...为什么退出?)
$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 ;起初,我使用exit也是因为echo包含了一堆HTML,弄乱了返回给我的AJAX调用的内容。当我使用exit时,它干净利落地切断了HTML,但是Slim响应对象并没有像我定义的那样改变响应头(参见上面的代码)。
我意识到这不是Slim设计的工作方式。使用echo,而不是exit。注意-超薄文档:
每当您从路由回调中回显()内容时,echo()的内容在输出缓冲区中被捕获>,并且稍后在HTTP响应被>返回给客户端之前被附加到响应主体。
这很方便,但我无法回显。我搞砸的是一个更大的问题。内容与行为的分离。如果您和我一样,您正在设置一个单页面应用程序,其中的代码基本上位于index.php上。有一个初始的html,我需要加载,所以我把它包含在页面上。我需要做的是创建一个更干净的分离。我的路由设置得很好,所以当人们得到'/‘这个Slim_Views时(参见开发版本)。为我返回html和js的呈现模板。非常出色!
现在,我拥有了Slim的所有工具,并且我的代码更加干净、独立、易于管理,并且更符合http协议。我想这就是框架的作用。:-)
注意:我并不是说所有这些都是你的问题,但我认为这个问题和你的设置非常相似。这可能会帮助另一个在这条道路上徘徊的新人。
更新: @alttag提到,这个答案已经过时了(Slim 2)
对于Slim3,请参阅下面的答案或see this page in the documentation
发布于 2016-02-29 02:51:04
在使用Slim 3时,我使用的是以下格式:
<?php
$app = new \Slim\App();
$app->get('/{id}', function ($request, $response, $args) {
$id = $request->getAttribute('id');
return $response->withJSON(
['id' => $id],
200,
JSON_UNESCAPED_UNICODE
);
});在请求"/123“时,结果JSON为:
{
id: "123"
}更多信息read here。
更新向withJSON添加了第二个和第三个参数。第二个是HTTP状态码,第三个是Json编码选项(最适合特殊字符和其他字符,例如:正确打印"ã“)
https://stackoverflow.com/questions/6807404
复制相似问题