私は、スリムフレームワークの初心者です。 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;
?>
_
一般的に、次の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
});
「SlimはすぐにJSON、XML、およびURLエンコードされたデータを解析できます」- http://www.slimframework.com/docs/objects/request.html 「リクエストボディ」の下。
任意のボディ形式のリクエストを処理する最も簡単な方法は、「getParsedBody()」を使用することです。これはguillermoandraeの例を行いますが、2行ではなく1行にします。
例:
$allPostVars = $application->request->getParsedBody();
次に、指定された配列内のキーで任意のパラメーターにアクセスできます。
$someVariable = $allPostVars['someVariable'];