php - SLIM PHP api 400 错误 - $_REQUEST 不起作用

标签 php apache rest slim

我开始按照流行教程 here 学习如何正确使用 REST API

当尝试创建一个简单的 POST api 时,我不断遇到 400 错误,并且到目前为止我还没有在网上找到任何答案。

API如下:

$app->post('/test', function() use ($app) {
//             check for required params
            verifyRequiredParams(array('email'));
            echo "Success";
});

它尝试使用此代码块验证“电子邮件”参数,与教程相同:

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

该代码总是失败并显示 400 错误代码,因为 $_REQUEST 函数似乎返回一个空数组。知道可能出了什么问题吗?我正在运行 apache 的 ubuntu 服务器上进行开发。

Slim API 框架设置正确,因为我可以通过 Google 的高级 Rest 客户端调用一个非常简单的调用,该调用正确地回显响应。我肯定将正确的参数传递到 api 中。

更新:我还尝试直接从 api 运行 $_REQUEST 和 $_GET 函数,它只返回一个空字符串,如下所示:

Array
(
)

我想知道是否有某种 apache 配置文件阻止了这些函数的数据或其他内容?

最佳答案

可能的问题: 您是否仔细检查过您在请求 header 中选择的 Content-Type 是否正确? 我怀疑客户端正在感知从服务器端发送的格式错误的标记语言。

可能的解决方案: 将 Content-Type: application/x-www-form-urlencoded 更改为 application/JSON,反之亦然。

关于php - SLIM PHP api 400 错误 - $_REQUEST 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349043/

相关文章:

php - Laravel - 我可以在 Controller 中重复使用验证器实例吗?

python - 在 django 开发服务器上工作,但不在 apache 上工作

php - 如果可以选择,网页内容应该保存在文件系统中还是MySQL中?

java - RESTful 服务的时间戳精度问题

java - 如何使 Content-Type header 可选?

php - CentOS 7 上带有 Apache 的多个 PHP 版本

javascript - 从下拉列表中获取值并将其填充到另一个下拉列表以及输入字段

php - 从 15 分钟间隔开始获取结果

ruby-on-rails - 使用Passenger 和Apache : Unexpected error in mod_passenger: Cannot connect to Unix socket Permission denied (errno=13) 部署Rails 时出错

rest - 在没有实体 ID 的 REST API 中删除最佳实践