SLIM PHP api 400 错误 - $_REQUEST 不工作

SLIM PHP api 400 error - $_REQUEST not working

我开始学习如何正确使用 REST API 遵循流行的教程 here

在尝试创建一个简单的 POST api 时,我将 运行 保持在 400 错误中,到目前为止我还没有在网上找到任何答案。

API如下:

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

尝试使用此代码块验证 'email' 参数,与教程相同:

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 函数似乎返回一个空数组。任何想法可能出了什么问题?我正在 ubuntu 服务器 运行 apache 上开发。

Slim API 框架设置正确,因为我可以通过 Google 的 Advanced Rest Client 调用一个非常简单的调用,它会正确回显响应。而且我肯定将正确的参数传递给 api.

更新:我还尝试了 运行 直接从 api 中获取 $_REQUEST 和 $_GET 函数,它只是 returns 一个像这样的空字符串:

Array
(
)

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

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

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

求教程领取 $name = $app->request->post('name');

POST 参数必须在有效负载数据中 name=你的名字&password=pass&email=me@mail.com application/x-www-form-urlencoded

如果您在 URL 之后提供参数但不在有效负载数据中,则为 GET 请求。在这种情况下,本教程部分有效(它看到参数以验证所需参数是否存在)但它正在寻找参数 "anywhere",而它应该只在 POST 的有效负载参数中寻找。