Slim JSON Outputs Slim JSON Outputs json json

Slim JSON Outputs


Why not just use Slim's Response Object? (also... why exit?)

$dataAry = // Some data array$response = $app->response();$response['Content-Type'] = 'application/json';$response['X-Powered-By'] = 'Potato Energy';$response->status(200);// etc.$response->body(json_encode($dataAry));// Or echo json_encode($dataAry)

Let me preface by saying I still consider myself a noob so if I'm making errors please correct me so I can learn. But, I was playing with a similar problem/question and I thought I might chime in with 2 cents and archive a little more discussion on the matter. The more information there is about Slim on Stack the better.

I was basically toying with the same thing and I noticed that you were using exit; At first, I was using exit also because echo was including a bunch of HTML and mucking up what was being returned to my AJAX call. When I used exit, it cleanly cut the HTML out but then the Slim response object wasn't changing the response headers as I defined (see above code.)

What I realized was that this isn't how Slim was designed to work. Use echo, not exit. NOTE - Slim Doc:

Whenever you echo() content from within a route callback, the echo()’d content is captured >in an output buffer and later appended to the Response body before the HTTP response is >returned to the client.

That's convenient, but I was not able to echo. What I was messing up on was a bigger problem. Separation of content from behavior. If you're like me, you're setting up a single page application where this code basically sits on index.php. There is initial html that I needed to load up so I included it on that page. What I needed to do was create a cleaner separation. My routing was properly set up and so when people GET '/' the Slim_Views (see Develop Rel.) returns a rendered template of html and js for me. Brilliant!

Now I have all of Slim's tools at disposal and my code is much much cleaner, separate, manageable, and more compliant with http protocols. I guess this is what frameworks are for. :-)

NOTE: I'm not saying all this is what went down on your end, but I thought the question and your setup seemed very similar. It might help another new guy who wanders down this same path.

UPDATE: As @alttag mentions, this answer is getting out of date (Slim 2)

For Slim3, see an answer below or see this page in the documentation


header("Content-Type: application/json");echo json_encode($result);exit;

Hint: Using The Slim PHP Framework for Developing REST APIs


Using Slim 3, I'm using this format:

<?php$app = new \Slim\App();$app->get('/{id}', function ($request, $response, $args) {    $id = $request->getAttribute('id');    return $response->withJSON(        ['id' => $id],        200,        JSON_UNESCAPED_UNICODE    );});

On request "/123", result JSON with:

{  id: "123"}

More infos read here.

[UPDATE]Added second and third param to withJSON. Second is The HTTP status code, and third is Json encoding options (best for especial chars and others, for example: print "ã" correctly)