Slim JSON Outputs

I am using the Slim framework with PHP to create a RESTful API for my app. However, I assumed that the framework would have some way of creating easier JSON outputs rather than just exit($jsonEncodedVariable);. Am I missing something in the framework, or do I need to use json_encode()… exit($json)… for every method?All of the data is taken out …

via PHP Website Development » Search Results » ajax:

Slim JSON Outputs

I am using the Slim framework with PHP to create a RESTful API for my app. However, I assumed that the framework would have some way of creating easier JSON outputs rather than just exit($jsonEncodedVariable);.
Am I missing something in the framework, or do I need to use json_encode()… exit($json)… for every method?
All of the data is taken out of the my MySQL database and would then be put into a JSON array depending on what REST request was called.
For example, if /api/posts/all was requested, I would exit() a JSON array of all the posts which each value for its own key, “value” : key.
My question is, is there an easy way, using the slim framework, for exit()’ing JSON code instead of exiting it as plain text?
…………………………………….

header(“Content-Type: application/json”);
echo json_encode($result);
exit;Hint: Using The Slim PHP Framework for Developing REST APIs
…………………………………….

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.
…………………………………….

function _die($array)
echo json_encode($array);
exit;

$result = mysql_query(“SELECT * FROM table”);
while($row = mysql_fetch_assoc($result))
$array[] = $row;

_die($array);
…………………………………….

I think Slim also provides a middleware object which does this automatically so users of that framework doesnt have to write json_decode and encode on every request, its called the Slim_Middleware_ContentType object.
$app->response()->(‘application/json’);
$app->add(new Slim_Middleware_ContentType());it does the decoding for you. the decoding works great.But for encoding the last post is great.
Thanks, Dharani
…………………………………….

My fix was adding “exit;” at the end of the json print out, my dev server didn’t care, but my live server would not trigger the json end event. I did not need to add headers or use json_encode.

For more info: Slim JSON Outputs

PHP Website Development » Search Results » ajax

Slim JSON Outputs

Share this post:

Related Posts

Leave a Comment