如何在 Slim 中访问 POST 请求的 JSON 请求正文?

2022-08-31 00:02:34

我只是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;
?>

答案 1

一般来说,您可以通过以下两种方式之一单独访问参数: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
});

答案 2

“Slim可以开箱即用地解析JSON,XML和URL编码的数据” - http://www.slimframework.com/docs/objects/request.html“请求正文”下。

处理任何正文形式的请求的最简单方法是通过“getParsedBody()”。这将做吉列尔莫安德拉的例子,但在1行而不是2上。

例:

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

然后,您可以通过给定数组中的键访问任何参数。

$someVariable = $allPostVars['someVariable'];

推荐