如何在 Slim 中访问 POST 请求的 JSON 请求主体?
How to access a JSON request body of a POST request in Slim?
我只是 Slim 框架的新手。我用 Slim 框架写了一个 API。
来自 iPhone 应用程序的 POST 请求到达此 API。此 POST 请求采用 JSON 格式。
但我无法访问 iPhone 请求中发送的 POST 参数。当我尝试打印 POST 参数的值时,我得到每个参数的 "null"。
$allPostVars = $application->request->post(); //Always I get null
然后我尝试获取即将到来的请求的正文,将正文转换为 JSON 格式并将其作为对 iPhone 的响应发回。然后我得到了参数值,但它们的格式非常奇怪,如下所示:
"{\"password\":\"admin123\",\"login\":\"admin@gmail.com\",\"device_type\":\"iphone\",\"device_token\":\"785903860i5y1243i5\"}"
所以可以肯定的是 POST 请求参数将进入此 API 文件。虽然它们在 $application->request->post()
中不可访问,但它们正在进入请求正文。
我的第一个问题是我应该如何从请求主体访问这些 POST 参数,我的第二个问题是为什么请求数据在将请求主体转换为 JSON 格式?
以下是必要的代码片段:
<?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;
?>
一般来说,您可以通过以下两种方式之一单独访问 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 can parse JSON, XML, and URL-encoded data out of the box" - http://www.slimframework.com/docs/objects/request.html 在 "The Request Body" 下。
处理任何正文形式的请求的最简单方法是通过 "getParsedBody()"。这将执行 guillermoandrae 示例,但在 1 行而不是 2 行上。
示例:
$allPostVars = $application->request->getParsedBody();
然后您可以通过给定数组中的键访问任何参数。
$someVariable = $allPostVars['someVariable'];
我只是 Slim 框架的新手。我用 Slim 框架写了一个 API。
来自 iPhone 应用程序的 POST 请求到达此 API。此 POST 请求采用 JSON 格式。
但我无法访问 iPhone 请求中发送的 POST 参数。当我尝试打印 POST 参数的值时,我得到每个参数的 "null"。
$allPostVars = $application->request->post(); //Always I get null
然后我尝试获取即将到来的请求的正文,将正文转换为 JSON 格式并将其作为对 iPhone 的响应发回。然后我得到了参数值,但它们的格式非常奇怪,如下所示:
"{\"password\":\"admin123\",\"login\":\"admin@gmail.com\",\"device_type\":\"iphone\",\"device_token\":\"785903860i5y1243i5\"}"
所以可以肯定的是 POST 请求参数将进入此 API 文件。虽然它们在 $application->request->post()
中不可访问,但它们正在进入请求正文。
我的第一个问题是我应该如何从请求主体访问这些 POST 参数,我的第二个问题是为什么请求数据在将请求主体转换为 JSON 格式?
以下是必要的代码片段:
<?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;
?>
一般来说,您可以通过以下两种方式之一单独访问 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 can parse JSON, XML, and URL-encoded data out of the box" - http://www.slimframework.com/docs/objects/request.html 在 "The Request Body" 下。
处理任何正文形式的请求的最简单方法是通过 "getParsedBody()"。这将执行 guillermoandrae 示例,但在 1 行而不是 2 行上。
示例:
$allPostVars = $application->request->getParsedBody();
然后您可以通过给定数组中的键访问任何参数。
$someVariable = $allPostVars['someVariable'];