How can I receive a JSON in symfony2

16,691

Solution 1

your code i think not complete,if you want to send data to server with json format i think the setup $.ajax like this, just example

$.ajax({
                url: url,
                type:"POST",
                data:"JSONFile=" + json,
                success:function (data) {
                    $('div.tooltip p').html(data);
                }
            });

add parameter JSONFile or whatever what do you want.and you can use json decode to retrive json from client.

this is code in php:

$json = $_POST['JSONFile'];

var_dump(json_decode($json));
var_dump(json_decode($json, true)); //true option if you will convert to array

in symfony2 controller direct acces $_POST is bad so use request $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

Solution 2

in your ajax request u must set the content type to application/json:

$.ajax({
      url: url,
      type:"POST",
      contentType: 'application/json',
      data:json,
      success:function (data) {
           $('div.tooltip p').html(data);
      }
});

and in your controller use this to parse the content:

if($request->getMethod() == 'POST') {
    if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
        $data = json_decode($request->getContent(), true);
        $request->replace(is_array($data) ? $data : array());
    }
}
Share:
16,691
Johannes Klauß
Author by

Johannes Klauß

Software Engineer at Spaceteams.

Updated on June 18, 2022

Comments

  • Johannes Klauß
    Johannes Klauß about 2 years

    I'm currently working on a symfony2 based project with lots of ajax usage.

    Now I want to send a JSON via $.ajax(); (POST type) and handle it in a symfony2 controller. But I'm not quite sure how I access the JSON inside the controller.

    Right now I've got the following:

    JS:

                $.ajax({
                    url: url,
                    type:"POST",
                    data:json,
                    success:function (data) {
                        $('div.tooltip p').html(data);
                    }
                });
    

    And the PHP:

        public function registrationAction(Request $request) {
            if($request->getMethod() == 'POST') {
                // How to receive??
            }
    
            return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig');
    }
    

    The only thing I don't know is how can I access the JSON? I'm sure it's pretty easy I just don't see it. Thanks for your help!

  • chiborg
    chiborg over 12 years
    While this works and is uncomplicated, accessing $_POST directly is not a good way to do it with Symfony 2. The answer from jBinfo is much better.
  • viyancs
    viyancs over 12 years
    yup my code just example in php, in Sysmfony 2 maybe to get parameters and prefer hight security that will be different case. to get parameter you can use $request->request->get('JSONFile'); // get a $_POST parameter
  • Pratik
    Pratik about 7 years
    It is $request->request->replace(is_array($data) ? $data : array()); See api here for methods used on $request object.