2

Slim Framework v3 を使用していますが、ブラウザー クライアントから REST API に送信する JSON データへのアクセスに問題があります。

現在$request->getParsedBody();、データへのアクセスに使用していますが、返されるのは文字列だけであり、解析したくありません。この問題にはもっと良い解決策があると思うからです。

クライアントから送信される内容は次のとおりです。

$data = array ();
$data ["key1"] = "value1";
$data ["key2"] = "value2";
$data ["key3"] = "value3";
$data = json_encode ( $data );

これにより、{"key1":"value1","key2":"value2","key3":"value3"}

サーバー上で何が起こるか?

$app->post ( '/somePath', function ($request, $response) {
    $body = $request->getParsedBody();
    var_dump($body);
    return $response;
});

var_dump();次の出力を生成します。

string(86) "array(1) {
  ["{"key1":"value1","key2":"value2","key3":"value3"}"]=>
  string(0) ""
}
"

ご覧のとおり$request->getParsedBody();、文字列を返しています。これを行うより良い方法はありますか?

私はすでに を使用しようとしまし$request->getBody();たが、それはタイプ Slim\Http\RequestBody のオブジェクトを返し、変数のみを保護しています。これらの保護された変数にアクセスする関数は見つかりませんでした。

Slim v3 を使用していることを覚えておいてください。v2 から多くのことが変更されています。

より良い方法がない場合、最良の方法で解析する方法を提案していただけますか?

4

2 に答える 2

6

Slim 3 docs で報告されているように:

JSON リクエストは json_decode($input, true) で連想配列に変換されます。

したがって、 getParsedBody は間違いなく進むべき道です。代わりに、クライアントによって設定されたリクエスト タイプを確認しましたか? これはapplication/json、Slim リクエスト オブジェクトが生のボディを正しく解釈できるようにするためです。

例えば:

Content-Type: application/json
于 2016-05-11T15:05:53.543 に答える
0

問題は、クライアントから取得しているデータにあるようです。この場合、ユーザーとして一種のvar_dumpまたはvar_export出力を受け取っています。受け取ったデータに基づいて、クライアント コードで次のようなものを検索します。

<?php var_export([json_encode($data) => '',],true);

サーバー側では、正しい JSON 文字列ではないため、本文を解析できません。

于 2016-05-11T14:59:28.210 に答える