我只是Slim框架中的新手。我使用Slim框架编写了一个API。
POST请求将从iPhone应用程序发送到此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;
?>
答案 0 :(得分:35)
一般来说,您可以通过以下两种方式之一单独访问POST
参数:
$paramValue = $application->request->params('paramName');
或
$paramValue = $application->request->post('paramName');
文档中提供了更多信息:http://docs.slimframework.com/#Request-Variables
在POST
中发送JSON时,您必须访问请求正文中的信息,例如:
$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
});
答案 1 :(得分:10)
“Slim可以解析开箱即用的JSON,XML和URL编码数据” - http://www.slimframework.com/docs/objects/request.html在“请求正文”下。
以任何正文形式处理请求的最简单方法是通过“getParsedBody()”。这将做guillermoandrae示例,但在1行而不是2。
示例:
unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UIClassicWindow: 0x13de0e270; frame = (0 0; 768 1024); userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x13de13fd0>; layer = <UIWindowLayer: 0x13de0ec60>>
然后,您可以通过给定数组中的键访问任何参数。
$allPostVars = $application->request->getParsedBody();