为什么不直接使用 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 美分插话,并就此事进行更多讨论。Stack 上有关 Slim 的信息越多越好。
我基本上在玩同样的事情,我注意到你在使用exit;起初,我使用 exit 也是因为 echo 包含一堆 HTML 并弄乱了返回给我的 AJAX 调用的内容。当我使用 exit 时,它干净利落地剪掉了 HTML,但是 Slim 响应对象并没有像我定义的那样更改响应标头(参见上面的代码。)
我意识到这不是 Slim 设计的工作方式。使用回声,而不是退出。注意 - 超薄文档:
每当您从路由回调中 echo() 内容时,echo() 的内容将被捕获 > 在输出缓冲区中,然后在 HTTP 响应 > 返回给客户端之前附加到响应正文。
这很方便,但我无法回应。我搞砸的是一个更大的问题。内容与行为分离。如果您像我一样,您将设置一个单页应用程序,其中此代码基本上位于 index.php 上。我需要加载初始 html,因此我将其包含在该页面上。我需要做的是创造一个更干净的分离。我的路由设置正确,因此当人们 GET '/' Slim_Views(请参阅 Develop Rel.)为我返回渲染的 html 和 js 模板。杰出的!
现在我可以使用 Slim 的所有工具,而且我的代码更干净、独立、易于管理,并且更符合 http 协议。我想这就是框架的用途。:-)
注意:我并不是说这一切都是你的结果,但我认为问题和你的设置看起来非常相似。它可能会帮助另一个在同一条路上徘徊的新人。
更新:正如@alttag 提到的,这个答案已经过时了(Slim 2)
对于 Slim3,请参阅下面的答案或查看文档中的此页面