web-dev-qa-db-ja.com

SlimのPOSTリクエストのJSONリクエストボディにアクセスするには?

私は、スリムフレームワークの初心者です。 Slimフレームワークを使用して1つのAPIを作成しました。

POST iPhoneアプリからこのAPIにリクエストが来ています。このPOSTリクエストはJSON形式です。

しかし、iPhoneからのリクエストで送信されるPOSTパラメーターにアクセスできません。POSTパラメーターの値を印刷しようとすると、すべてのパラメーターの「null」。

_$allPostVars = $application->request->post(); //Always I get null
_

それから、私はやってくるリクエストの本文を取得し、本文をJSON形式に変換し、それをiPhoneへの応答として送り返そうとしました。次に、パラメーターの値を取得しましたが、次のような非常に奇妙な形式になっています。

_"{\"password\":\"admin123\",\"login\":\"[email protected]\",\"device_type\":\"iphone\",\"device_token\":\"785903860i5y1243i5\"}"
_

確かなことの1つは、POST要求パラメーターがこのAPIファイルに送られていることです。$application->request->post()でアクセスできませんが、要求本体に入っています。

私の最初の問題は、リクエストボディからこれらのPOSTパラメータにアクセスする方法です。 ?

必要なコードスニペットは次のとおりです。

_<?php

    require 'Slim/Slim.php';    

    \Slim\Slim::registerAutoloader();

    //Instantiate Slim class in order to get a reference for the object.
    $application = new \Slim\Slim();

    $body = $application->request->getBody();
    header("Content-Type: application/json");//setting header before sending the JSON response back to the iPhone
    echo json_encode($new_body);// Converting the request body into JSON format and sending it as a response back to the iPhone. After execution of this step I'm getting the above weird format data as a response on iPhone.
    die;
?>
_
14
user4407686

一般的に、次の2つの方法のいずれかでPOSTパラメーターに個別にアクセスできます。

$paramValue = $application->request->params('paramName');

または

$paramValue = $application->request->post('paramName');

詳細情報はドキュメントに記載されています: http://docs.slimframework.com/#Request-Variables

JSONがPOSTで送信される場合、たとえば次のように、リクエスト本文から情報にアクセスする必要があります。

$app->post('/some/path', function () use ($app) {
    $json = $app->request->getBody();
    $data = json_decode($json, true); // parse the JSON into an assoc. array
    // do other tasks
});
35
guillermoandrae

「SlimはすぐにJSON、XML、およびURLエンコードされたデータを解析できます」- http://www.slimframework.com/docs/objects/request.html 「リクエストボディ」の下。

任意のボディ形式のリクエストを処理する最も簡単な方法は、「getParsedBody()」を使用することです。これはguillermoandraeの例を行いますが、2行ではなく1行にします。

例:

$allPostVars = $application->request->getParsedBody();

次に、指定された配列内のキーで任意のパラメーターにアクセスできます。

$someVariable = $allPostVars['someVariable'];
11
lurker123456