-
-
Save james2doyle/33794328675a6c88edd6 to your computer and use it in GitHub Desktop.
<?php | |
function json_response($code = 200, $message = null) | |
{ | |
// clear the old headers | |
header_remove(); | |
// set the actual code | |
http_response_code($code); | |
// set the header to make sure cache is forced | |
header("Cache-Control: no-transform,public,max-age=300,s-maxage=900"); | |
// treat this as json | |
header('Content-Type: application/json'); | |
$status = array( | |
200 => '200 OK', | |
400 => '400 Bad Request', | |
422 => 'Unprocessable Entity', | |
500 => '500 Internal Server Error' | |
); | |
// ok, validation error, or failure | |
header('Status: '.$status[$code]); | |
// return the encoded json | |
return json_encode(array( | |
'status' => $code < 300, // success or not? | |
'message' => $message | |
)); | |
} | |
// if you are doing ajax with application-json headers | |
if (empty($_POST)) { | |
$_POST = json_decode(file_get_contents("php://input"), true) ? : []; | |
} | |
// usage | |
echo json_response(200, 'working'); // {"status":true,"message":"working"} | |
// array usage | |
echo json_response(200, array( | |
'data' => array(1,2,3) | |
)); | |
// {"status":true,"message":{"data":[1,2,3]}} | |
// usage with error | |
echo json_response(500, 'Server Error! Please Try Again!'); // {"status":false,"message":"Server Error! Please Try Again!"} |
Setting the error code does not work for me. Specifically, if I want to set the error code to 422 I get error 500. To make it work I had to change:
header('Status: '.$status[$code]);
to:
header('Status: '.$code);
Was there any reason why you were setting the status to the string value instead of the error code?
Just swap the argument of method
json_response
.
Before : function json_response($message = null, $code = 200)
After : function json_response($code = 200, $message = null)
dfdf
Thanks for sharing! Btw I think that @saurabhmdh is right. The parameters order were accidentally swapped.
Updated the params. Can't believe they were swapped for so long... 🤕
Only thing I added was ob_clean();
before header_remove();
. Is it redundant?
Dears for who gets 500 Server Error use exit after echo the json response
hope it helps
Instead of
return json_encode([
'status' => $code < 300,
'message' => $message
]);
I prefer
die(json_encode([
'status' => $code < 300,
'message' => $message
]));
so there's no need for echo
before calling json_response
anymore, and the script is exited.
@james2doyle seems like you're swapping arguments in your usage examples.