使用Silex框架开发restapi
Develop a rest api using Silex framework
我开始使用 silex 来休息 api。这是我的第一个 api!
我做了什么:
更新:
Federic 的提示改进了代码。添加使用 Symfony JsonResponse。暂时不工作。
<?php
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\HttpFoundation\JsonResponse;
// init Silex app
$app = new Silex\Application();
$app['debug'] = true;
//configure database connection
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'dbname' => 'db',
'user' => 'root',
'password' => '',
'charset' => 'utf8',
),
));
$app->get('/apps', function () use ($app){
$sql = "select apps.id, apps.guid, apps.title, clients.client, countries.country, langs.lang, apps.active from apps
inner join countries on apps.id_country = countries.id
inner join clients on clients.id = apps.id_client
inner join langs on langs.id = apps.id_lang
order by apps.created_at desc";
$results = $app['db']->fetchAll($sql);
$response['status'] = array(
'code' => 200,
'message' => 'OK'
);
$response['data'] = $results;
//return $app->json($response);
$jsonResponse = new JsonResponse($response);
$jsonResponse->setEncodingOptions(JsonReponse::DEFAULT_ENCODING_OPTIONS | JSON_PRETTY_PRINT);
return $jsonResponse;
});
$app->run();
什么return?
{"status":{"code":200,"message":"OK"},"data":[{"id":"2","guid":"a8559e9b-d850-4964-b672-335a87fe9e8b","title":"Coverdine Plus Light","client":"Servier","country":"England","lang":"English","active":"1"},{"id":"1","guid":"4f242e9d-c041-4c79-bc82-b62604de403c","title":"Coverdine","client":"Servier","country":"England","lang":"English","active":"0"}]}
我如何使用 JSON_PRETTY_PRINT
来改进我的 json 对象的人类阅读?
不使用 $app->json($response);
,而是使用 JsonResponse
。你可以用他的setEncodingOptions
方法设置JSON_PRETTY_PRINT
标志。
<?php
use Symfony\Component\HttpFoundation\JsonResponse;
// ...
$jsonResponse = new JsonResponse($response);
$jsonResponse->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_PRETTY_PRINT);
return $jsonResponse;
我也遇到过这个困难,经过大量研究我找到了功能:do_dump,click here在github中看到它。
要使用它,只需这样做:
$var = json_decode('{"a":1,"b":2,"c":3,"d":4,"e":5}');
do_dump($var);
这对我有用:
...
require_once(__DIR__ .'/../vendor/autoload.php');
use Symfony\Component\HttpFoundation\Response;
...
$response = $sth->fetchALL(PDO::FETCH_ASSOC);
return $app->json($response, Response::HTTP_OK)->setEncodingOptions(JSON_PRETTY_PRINT);
我开始使用 silex 来休息 api。这是我的第一个 api!
我做了什么:
更新: Federic 的提示改进了代码。添加使用 Symfony JsonResponse。暂时不工作。
<?php
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\HttpFoundation\JsonResponse;
// init Silex app
$app = new Silex\Application();
$app['debug'] = true;
//configure database connection
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'dbname' => 'db',
'user' => 'root',
'password' => '',
'charset' => 'utf8',
),
));
$app->get('/apps', function () use ($app){
$sql = "select apps.id, apps.guid, apps.title, clients.client, countries.country, langs.lang, apps.active from apps
inner join countries on apps.id_country = countries.id
inner join clients on clients.id = apps.id_client
inner join langs on langs.id = apps.id_lang
order by apps.created_at desc";
$results = $app['db']->fetchAll($sql);
$response['status'] = array(
'code' => 200,
'message' => 'OK'
);
$response['data'] = $results;
//return $app->json($response);
$jsonResponse = new JsonResponse($response);
$jsonResponse->setEncodingOptions(JsonReponse::DEFAULT_ENCODING_OPTIONS | JSON_PRETTY_PRINT);
return $jsonResponse;
});
$app->run();
什么return?
{"status":{"code":200,"message":"OK"},"data":[{"id":"2","guid":"a8559e9b-d850-4964-b672-335a87fe9e8b","title":"Coverdine Plus Light","client":"Servier","country":"England","lang":"English","active":"1"},{"id":"1","guid":"4f242e9d-c041-4c79-bc82-b62604de403c","title":"Coverdine","client":"Servier","country":"England","lang":"English","active":"0"}]}
我如何使用 JSON_PRETTY_PRINT
来改进我的 json 对象的人类阅读?
不使用 $app->json($response);
,而是使用 JsonResponse
。你可以用他的setEncodingOptions
方法设置JSON_PRETTY_PRINT
标志。
<?php
use Symfony\Component\HttpFoundation\JsonResponse;
// ...
$jsonResponse = new JsonResponse($response);
$jsonResponse->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_PRETTY_PRINT);
return $jsonResponse;
我也遇到过这个困难,经过大量研究我找到了功能:do_dump,click here在github中看到它。
要使用它,只需这样做:
$var = json_decode('{"a":1,"b":2,"c":3,"d":4,"e":5}');
do_dump($var);
这对我有用:
...
require_once(__DIR__ .'/../vendor/autoload.php');
use Symfony\Component\HttpFoundation\Response;
...
$response = $sth->fetchALL(PDO::FETCH_ASSOC);
return $app->json($response, Response::HTTP_OK)->setEncodingOptions(JSON_PRETTY_PRINT);