[英]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.