【问题标题】:GET REST API using Slim Framework 3 Skeleton使用 Slim Framework 3 Skeleton 获取 REST API
【发布时间】:2018-11-28 22:17:03
【问题描述】:

我正在学习如何使用 PHP 和 Slim 框架构建 API,我做了一个名为“data”的测试来获取一个数组:

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

出了什么问题,我需要做什么才能得到数组?

【问题讨论】:

    标签: php rest slim


    【解决方案1】:

    不要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);
    

    【讨论】:

    • 我按照你说的编辑了它,但仍然给我一个空的回复,我将用这些更改编辑我的帖子并添加网址。
    【解决方案2】:

    好吧,我终于明白了,Slim 3 需要返回一个 slim 对象(比如 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 的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2015-06-26
      • 2016-08-30
      • 2018-02-12
      • 1970-01-01
      相关资源
      最近更新 更多