なぜ 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を使用していることに気付きました。最初は、exit も使用していました。これは、echo が大量の HTML を含み、AJAX 呼び出しに返されたものを台無しにしていたためです。exit を使用すると、HTML がきれいに切り取られましたが、Slim 応答オブジェクトは、定義したとおりに応答ヘッダーを変更していませんでした (上記のコードを参照してください)。
私が気付いたのは、これは Slim が機能するように設計された方法ではないということです。exit ではなく、echo を使用します。注 - スリム ドキュメント:
ルート コールバック内からコンテンツを echo() するたびに、echo() されたコンテンツが出力バッファにキャプチャされ、HTTP 応答がクライアントに返される前に応答本文に追加されます。
便利なのですが、エコーできませんでした。私が台無しにしていたのは、より大きな問題でした。行動からのコンテンツの分離。あなたが私のような人なら、このコードが基本的に index.php にある単一ページのアプリケーションをセットアップしていることになります。ロードする必要がある最初の html があるので、そのページに含めました。私がしなければならなかったのは、より明確な分離を作成することでした。私のルーティングは適切に設定されていたので、人々が GET '/' を実行すると、Slim_Views (Develop Rel. を参照) はレンダリングされた html と js のテンプレートを返します。素晴らしい!
これで、Slim のツールをすべて自由に使用できるようになり、私のコードははるかにクリーンで、分離され、管理しやすくなり、http プロトコルにより準拠したものになりました。これがフレームワークの目的だと思います。:-)
注:これがすべてあなたの側でダウンしたと言っているわけではありませんが、質問とあなたの設定は非常に似ていると思いました. この同じ道をさまよっている別の新しい男を助けるかもしれません.
更新: @alttag が言及しているように、この回答は古くなっています (Slim 2)
Slim3 については、以下の回答を参照するか、ドキュメントのこのページを参照してください