为什么不直接使用 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,请参阅下面的答案或查看文档中的此页面