繁体   English   中英

在超薄框架中读取 JSON 输入

[英]read JSON input in slim framework

我是遵循教程的超薄框架新手,我设法将发布数据发送到我的 API。但是当我尝试将数据作为 JSON 发送时,它给了我一个错误。我尝试按如下方式接受 JSON 请求什么是实现此目的的正确语法.我收到错误,因为必填字段名称、电子邮件、密码丢失或为空

$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"
}

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

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

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

编辑:

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

问题在于我verifyRequiredParams放置我的verifyRequiredParams函数。如果有人遇到同样的问题,我通过以下代码解决了问题。

$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();
    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM