在 slim 框架中读取 JSON 个输入

read JSON input in slim framework

我是遵循教程的 slim 框架的新手 我设法将 post 数据发送到我的 API.but 当我尝试将数据发送为 JSON 它给了我一个 error.I 尝试接受 JSON 请求,如下所示,要实现的正确语法是什么 this.i 出现错误,因为必填字段名称、电子邮件、密码丢失或为空

$app->post('/login', function() use ($app) {
                // check for required params
                $json = $app->request->getBody();
                $data = json_decode($json, true); 
                verifyRequiredParams(array('name','email', 'password'));

我如何从 JSON 数组(如

)中的 API 中的 post 请求中获取 json 数据
{
"name":"usertest",
"email":"xxxx@xxx.xxx",
"password":"xxxxxx"
}

如果请求以 JSON 形式出现,我可以使用 verifyRequiredParams(array('name','email', 'password'));$name = $app->request->post('name'); 吗?

要读取请求数据,您可以使用 $data 属性。它应该是一个对象,所以你可以像这样使用它:

$name = $data->name;
$email = $data->email;

编辑:

使用 $data = json_decode($json) 而不是 $data = json_decode($json, true) 将 json 数据转换为对象而不是关联数组。

问题出在放置我的 verifyRequiredParams 函数时 think.i 通过以下代码修复了问题,以防有人遇到同样的问题。

$app->post('/login', function() use ($app) {
            if($app->request->headers->get('Content-Type')=='application/json'){
                $json = $app->request->getBody();
                verifyRequiredParamsjson(array('email','password'),$json); 
                $data = json_decode($json); 

                // check for required params                            

                $email = $data->email;
                $password = $data->password;
            }
            else{
                // check for required params
                verifyRequiredParams(array('email', 'password'));
                // reading post params
                $email = $app->request->post('email');
                $password = $app->request->post('password');
            }

            $response = array();

            $db = new DbHandler();
            // check for correct email and password
            if ($db->checkLogin($email, $password)) {
                // get the user by email
                $user = $db->getUserByEmail($email);

                if ($user != NULL) {
                    $response["error"] = false;
                    $response['name'] = $user['name'];
                    $response['email'] = $user['email'];
                    $response['apiKey'] = $user['api_key'];
                    $response['createdAt'] = $user['created_at'];
                } else {
                    // unknown error occurred
                    $response['error'] = true;
                    $response['message'] = "An error occurred. Please try again";
                }
            } 
            else{
                    $response['error'] = true;
                    $response['message'] = 'Login failed. Incorrect credentials';
                }

            echoRespnse(200, $response);
        });

需要参数检查,

function verifyRequiredParams($required_fields) {
    $error = false;
    $error_fields = "";
    $request_params = array();
    $request_params = $_REQUEST;
    // Handling PUT request params
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
        $app = \Slim\Slim::getInstance();
        parse_str($app->request()->getBody(), $request_params);
    }
    foreach ($required_fields as $field) {
        if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
            $error = true;
            $error_fields .= $field . ', ';
        }
    }

    if ($error) {
        // Required field(s) are missing or empty
        // echo error json and stop the app
        $response = array();
        $app = \Slim\Slim::getInstance();
        $response["error"] = true;
        $response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
        echoRespnse(400, $response);
        $app->stop();
    }
}