Search code examples
phpjsonrestsilex

Develop a rest api using Silex framework


I'm starting to develop a rest api using silex. It's my first api!

What i've done:

Update: Code improved with the tip of Federic . Addition of Use Symfony JsonResponse. Not working for now.

<?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();

What it 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"}]}

How can i use JSON_PRETTY_PRINT to improve human read of my json object?


Solution

  • Instead of using $app->json($response);, use JsonResponse instead. You can set JSON_PRETTY_PRINT flag with his setEncodingOptions method.

    <?php
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    // ...
    $jsonResponse = new JsonResponse($response);
    $jsonResponse->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_PRETTY_PRINT);
    
    return $jsonResponse;