2016-05-11 5 views
1

Slim Framework v3を使用しています。ブラウザクライアントからREST APIに送信するJSONデータへのアクセスに問題があります。Slim Framework v3、POST発行による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();

は、次のような出力を生成している:あなたが見ることができるように、 $request->getParsedBody();は、文字列を返す

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

。 これを行うにはもっと良い方法はありますか?

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

私はSlim v3を使用していますので、v2から多くの変更が加えられています。

良い方法がない場合、それを最良の方法で解析する方法がありますか?

+0

あなたは、コンテンツタイプを使用してデータをポストする必要があります。 –

答えて

5

スリム3ドキュメントによって報告されたように:

JSON要求がjson_decode($入力、真)と連想配列に変換されます。

ですから、getParsedBodyは確かに行く方法です。 代わりに、クライアントが設定したリクエストタイプを確認してください。スリムリクエストオブジェクトを生のボディの正しい解釈にするには、application/jsonにする必要があります。

例:アプリケーション/ JSONヘッダー:

Content-Type: application/json 
+0

出力は良く見えますが、 ["key1"] => 文字列(6) "値1" ["key2"] => 文字列(6) "値2" ["key3"] =>文字列(115) string(6) "value3" } " – PrototypeX7

+0

結果の文字列を投稿できますか? –

+0

最初のコメントを更新しました – PrototypeX7

0

クライアントから取得したデータに問題があるようです。この場合、ユーザーとしてvar_dumpまたはvar_exportの出力を受け取っています。それが正しいJSON文字列ではありませんので、体が解析できないサーバー側で

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

:あなたが受け取るデータによると、私はあなたのクライアントコードでこのようなものを検索します。

+0

私はクライアントのデータを変更しません。すでに投稿したものを期待しています。 'curl_setopt($ curl、CURLOPT_POSTFIELDS、$ data);' – PrototypeX7

+0

質問をクライアントサイドのコードで更新できますか?私の見地からは、ある時点でデータが修正されています。また、@ LuigiPreselloが言ったように、適切なコンテンツタイプのヘッダを使ってデータを送信していることを確認してください(フレームワークがより良いデータフォーマット変換を行うのに役立ちます) – dlopez

関連する問題