在 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();
}
}
我是遵循教程的 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();
}
}