Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Slim 3 getParsedBody() always null and empty

I'm am using the Slim Framework Version 3 and have some problems.

$app-> post('/', function($request, $response){
  $parsedBody = $request->getParsedBody()['email'];
  var_dump($parsedBody);
});

result is always:

null

Can you help me ?

like image 909
animatorist Avatar asked Feb 13 '17 07:02

animatorist


3 Answers

When I switch to slimframework version 4, I had to add :

$app->addBodyParsingMiddleware();

Otherwise the body was always null (even getBody())

like image 129
Thomas Avatar answered Nov 15 '22 04:11

Thomas


It depends how you are sending data to the route. This is a POST route, so it will expect the body data to standard form format (application/x-www-form-urlencoded) by default.

If you are sending JSON to this route, then you need to set the Content-type header to application/json. i.e. the curl would look like:

curl -X POST -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}' http://localhost/

Also, you should validate that the array key you are looking for is there:

$parsedBody = $request->getParsedBody()
$email = $parsedBody['email'] ?? false;
like image 5
Rob Allen Avatar answered Nov 15 '22 03:11

Rob Allen


Please, try this way:

$app-> post('/yourFunctionName', function() use ($app) {
  $parameters = json_decode($app->request()->getBody(), TRUE);
  $email = $parameters['email'];
  var_dump($email);
});

I hope this helps you!

like image 2
jcarrera Avatar answered Nov 15 '22 02:11

jcarrera