SLIM PHP api 400错误 - $ _REQUEST无效

时间:2015-02-05 16:25:43

标签: php apache rest slim

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

当尝试创建一个简单的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的Advanced Rest Client调用一个非常简单的调用,它可以正确回应。我肯定会将正确的参数传递给api。

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

Array
(
)

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

2 个答案:

答案 0 :(得分:2)

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

可能的解决方案: 更改内容类型:application / x-www-form-urlencoded to application / JSON,反之亦然。

答案 1 :(得分:0)

接收教程             $ name = $ app-&gt; request-&gt; post('name');

POST参数必须在Payload数据中             名称=提供yourname&安培;密码= PASS&安培; email=me@mail.com             应用程序/ x-WWW窗体-urlencoded

如果您在URL之后但不在有效内容数据中提供参数,那么就是GET请求。在这种情况下,教程部分工作(它看到验证所需参数的参数存在),但是当它应该只查看POST的有效负载参数时,它正在寻找“任何地方”的参数。