ПОЛУЧИТЬ ОТДЫХ API используя Slim Framework 3 Skeleton - PullRequest
0 голосов
/ 28 ноября 2018

Я учусь создавать API с использованием PHP и Slim Framework, я сделал тест под названием «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);
});

Когда я вызываю API с помощью / data, я получаюстатус 200 пустой ответ.

Это URL: http://sandboxweb.bailac.net/gts_benja/api/v1/data

Что не так и что мне нужно сделать, чтобы получить массив?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Ну, я наконец-то понял, 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.

Спасибо Алекс Ховански за вашу помощь!

0 голосов
/ 28 ноября 2018

Не 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);
...