2

私が読んだlaravelの本の中で、laravelの経験がある私の同僚も、JSONを生成するのはlaravelの方法ですべきだと言いました。

なぜこれを行う必要があるのですか:

Route::get('markdown/response', function()
{
    $data = array('iron', 'man', 'rocks');
    return Response::json($data);
});

私が読んだように、これを使用すると content-type ヘッダーも送信されます。

私が codeigniter を使用していたとき、私は単純にこれを行っていました:

echo json_endode($data);

そして、これまでに問題が発生したことはありません。コンテンツタイプが設定されていなくても構いません。実際にはphpが自動的に設定してくれるのかわかりませんが、問題はなかったので気にしませんでした。

そして、「新しい」テクノロジーを使用するとき、なぜそれが古き良きものよりも優れているのかを知りたいと思っています.

4

4 に答える 4

4

Response::json(およびその他の静的メソッド)から返される応答オブジェクトは、Response高度に変更可能です。

$response = Response::json($data);
$response->header('Content-Type', 'application/json');
return $response;

Laravel と Symfony のコード API で、さらに利用可能なメソッドを確認できます。

http://laravel.com/api/class-Illuminate.Http.Response.html http://api.symfony.com/2.1/Symfony/Component/HttpFoundation/Response.html

于 2013-10-26T13:33:05.403 に答える
4

ヘッダーを提供しないことでcontent-type、CodeIgniter でコーディングするときに「間違った」ことをしていました。

ほとんどのクライアント (ブラウザー、ajax 要求、特に jQuery) は、応答を正しく処理する方法を推測できるため、おそらく「うまくいった」でしょう。Content-Type: text/htmlCodeIgniter のデフォルト ヘッダーであるa を常に暗黙的に応答と共に返している可能性があります。

消費するクライアントがこのコンテンツの処理方法を認識できるように、常にHTTP 応答で適切なコンテンツ タイプを返す必要があります。これは、仕様で定義されている HTTP のメカニズムであり、フレームワークや言語に固有のものではないことに注意してください。

Response::json()

上記のコードは単なる便利な関数であり、Laravel が自動的にapplication/jsonヘッダーを設定し、データの配列を JSON 形式に変換します。あなたが指摘したように、CodeIgniter コードとの唯一の効果的な違いは、ヘッダーの設定です。

Response オブジェクトが Symfony の response オブジェクトを拡張していることは注目に値します。これは非常に「強力」です。つまり、HTTP プロトコルの非常に優れた実装です。

于 2013-10-26T16:36:27.297 に答える
2

うまくいったからといって、それが間違っていなかったというわけではありません。JSON は HTML ではないためtext/html、不正確Content-Typeです。

正しいヘッダーを送信するということは、jQuery などのライブラリが返されるデータの種類を理解していることを意味し、したがって、ガイダンスなしで独自に処理できます。ブラウザーは、JSON データをきれいに印刷したり、他の方法で読みやすくしたりすることもできます。

于 2013-10-26T16:42:42.893 に答える
0

ルートで何をしようとしているかによって異なります。json データのみを返したい場合は、json_encode($data) を返すだけで機能します。実際に ajax リクエストなどで使用するための json 応答を返すには、ヘッダーを適切に設定する必要があります。文字列。Response::json は、ヘッダーを適切に設定するレスポンスを設定するためのものです。

于 2013-10-26T13:32:20.887 に答える