无法使用Slim Framework从PUT请求获得响应

giorgos7

我试图使用PUT请求更新数据库中的现有实体,但是当我从phpStorm rest客户调试器调用请求时遇到2个问题

{"error":true,"message":"Required field(s) restaurant_id, service_rating, food_rating, music_rating is missing or empty"}

当我在Google chrome上从Advance rest client addon调用相同的请求时

{"error":true,"message":"Task failed to update. Please try again!"}

所以我不明白真正的错误是在verifyRequiredParams上还是在函数实现中。如果有人可以帮助我,请提供代码。

这是我的index.php文件

$app->put('/userRatings/:rating_id', 'authenticate', function($rating_id) use($app) {
// check for required params

verifyRequiredParams(array('restaurant_id', 'service_rating', 'food_rating', 'music_rating'));

global $user_id;
$restaurant_id = $app->request->put('restaurant_id');
$service_rating = $app->request->put('service_rating');
$food_rating = $app->request->put('food_rating');
$music_rating = $app->request->put('music_rating');



$db = new DbHandler();
$response = array();

// updating rating
$result = $db->updateRating($user_id, $rating_id, $restaurant_id, $service_rating, $food_rating, $music_rating);

if ($result) {
    // rating updated successfully
    $response["error"] = false;
    $response["message"] = "Task updated successfully";
} else {
    // task failed to update
    $response["error"] = true;
    $response["message"] = "Task failed to update. Please try again!";
}
echoRespnse(200, $response);
});

这是位于index.php文件中的verifyRequiredParams的功能代码。

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

这是函数所在的我的DbHandler.php文件。

public function updateRating( $user_id, $rating_id, $restaurant_id, $service_rating, $food_rating, $music_rating) {
    $stmt = $this->conn->prepare("UPDATE  user_ratings set  service_rating = ?, food_rating = ?, music_rating = ? WHERE user_id = ? AND rating_id = ? AND restaurant_id = ?");
    $stmt->bind_param("iiiiii", $user_id , $rating_id, $restaurant_id, $service_rating, $food_rating, $music_rating);
    $stmt->execute();
    $num_affected_rows = $stmt->affected_rows;
    $stmt->close();
    return $num_affected_rows > 0;
} 

我所有的连接都OK,我已经检查了它们,而且我的其他服务也正常工作

giorgos7

这两个错误是因为预先休息的客户端使用“ PUT”使用大写字母,而phpstorm使用较低的字符,即使其在phpstorm中用大写字母写成,我也注意到通过在verifyRequiredParams函数的if语句中将“ PUT”更改为“ put”,并且现在它的工作和更新完美

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法使用Slim Framework从PUT请求中获取正文

来自分类Dev

无法使用Slim Framework读取“授权” HTTP标头

来自分类Dev

Wiremock - 请求 HTTPS 时无法获得响应

来自分类Dev

使用请求库无法获得正确的响应页面

来自分类Dev

如何使用Slim Framework转发HTTP请求

来自分类Dev

PHP Slim Framework请求使用withAttribute错误

来自分类Dev

快速HTTP请求无法获得非200响应

来自分类Dev

为什么Python请求库无法获得响应?

来自分类Dev

快速HTTP请求无法获得非200响应

来自分类Dev

使用 Slim Framework 和 Android Retrofit 进行 PUT

来自分类Dev

如何使用Slim Framework处理php中的jsonp请求?

来自分类Dev

如何使用Retrofit 2获得API请求/响应时间

来自分类Dev

使用Slim PHP获取PUT参数

来自分类Dev

使用 Slim 3 重定向 POST 请求

来自分类Dev

无法使CORS使用Slim API

来自分类Dev

在Swagger PHP中使用Slim Framework

来自分类Dev

将Slim Framework与Swagger PHP结合使用

来自分类Dev

无法在 React 中使用 fetch 获得响应

来自分类Dev

Slim PHP-使用请求和响应对象的正确方法

来自分类Dev

无法获得$ http响应

来自分类Dev

无法获得Ajax响应

来自分类Dev

无法获得$ http响应

来自分类Dev

无法获得 [HttpPost] 响应

来自分类Dev

AngularJS:无法使用$ resource发送PUT请求

来自分类Dev

请求失败时,无法在JSONP代理回调中获得响应

来自分类Dev

无法通过Python请求获得“第一个”响应

来自分类Dev

Slim上的PUT请求正文为NULL

来自分类Dev

使用apache Camel将SOAP请求发送到远程Web服务并获得响应

来自分类Dev

如何使用 spring-cloud-contract 获得上一个请求的响应