使用Slim Framework 3骨架获取REST API

时间:2018-11-27 21:20:25

标签: php rest slim

我正在学习如何使用PHP和Slim Framework构建API,我进行了一个名为“数据”的测试以获取数组:

header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
header("Access-Control-Allow-Headers: X-Requested-With");
header('Content-Type: text/html; charset=utf-8');
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

error_reporting(1);

require '../../slim/vendor/autoload.php';
$app = new \Slim\App;

function response($status_code, $response) {
    $app = \Slim\App::getInstance();
    $app->status($status_code);

    $app->contentType('application/json');
    return json_encode($response);
}

$app->get('/data', function () {

    $response = array();

    $data=array(
        array('Foo'=>'Foo', 'Bar'=>'Bar'),
        array('Lorem'=>'Ipsum', 'Dolor'=>'Sit Amet')
    );

    $response["error"] = false;
    $response["message"] = "datas: " . count($data);
    $response["data"] = $data;

    return response(200, $response);
});

当我使用/ data调用api时,状态为200空响应。

这是网址:http://sandboxweb.bailac.net/gts_benja/api/v1/data

出什么问题了,我需要做些什么来获得阵列?

2 个答案:

答案 0 :(得分:0)

不要echo,而是return

function response($status_code, $response) {
    $app = \Slim\App::getInstance();
    $app->status($status_code);
    $app->contentType('application/json');
    return json_encode($response);
}

然后在您的处理函数中:

return response(200, $response);

答案 1 :(得分:0)

好吧,我终于明白了,Slim 3需要返回一个苗条的对象(例如body,write和withJson),以下代码对我有用:

$app->get('/data', function ($request, $response){

    $data=array(
        array('Foo'=>'Foo', 'Bar'=>'Bar'),
        array('Lorem'=>'Ipsum', 'Dolor'=>'Sit Amet')
    );

    return $response->withJson($data);
});

以下返回方式也适用于我:

return $response->body(json_encode($data));
return $response->write(json_encode($data));

我更喜欢使用withJson方法来避免使用json_encode

谢谢Alex Howansky的帮助!