2012-03-15 16 views
5

Actualmente estoy trabajando en un proyecto basado Symfony2 con una gran cantidad de uso de ajax.¿Cómo puedo recibir un JSON en Symfony2

Ahora quiero enviar un JSON a través de $.ajax(); (tipo POST) y manejarlo en un controlador symfony2. Pero no estoy muy seguro de cómo accedo al JSON dentro del controlador.

Ahora que tengo los siguientes:

JS:

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

Y el PHP:

public function registrationAction(Request $request) { 
     if($request->getMethod() == 'POST') { 
      // How to receive?? 
     } 

     return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig'); 
} 

La única cosa que no sé es cómo puedo acceder el JSON? Estoy seguro de que es bastante fácil, simplemente no lo veo. ¡Gracias por su ayuda!

+1

debería echar un vistazo a la FOSRestBundle: https://github.com/FriendsOfSymfony/FOSRestBundle – igorw

Respuesta

3

su código Creo que no es completa, si desea enviar los datos al servidor con formato JSON creo que la configuración $ .ajax como este, solo ejemplo

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

parámetro complemento JSONFile o lo que sea, ¿qué quieres .y puede usar la decodificación json para recuperar json del cliente.

este es el código en PHP:

$json = $_POST['JSONFile']; 

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

de acceso directo controlador Symfony2 $_POST es malo a fin de utilizar la solicitud $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

+5

Aunque esto funciona y no es complicado, accediendo '$ _POST' no es directamente una buena manera de hacerlo con Symfony 2. La respuesta de jBinfo es mucho mejor. – chiborg

+0

yup mi código sólo ejemplo en php, en Sysmfony 2 tal vez para obtener los parámetros de seguridad y prefieren altura que estará caso diferente. para obtener el parámetro puede usar '$ request-> request-> get ('JSONFile'); // obtener un parámetro $ _POST' – viyancs

+1

estoy actualizando mi respuesta. – viyancs

13

en su solicitud Ajax u debe establecer el tipo de contenido application/json :

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

y en su controlador de uso esto va a analizar el contenido:

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()); 
    } 
} 

para más información vistazo a este libro de cocina de Silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

+0

Es '$ request-> request-> replace (? Is_array ($ datos) $ datos: array());' Ver API [aquí] (http://api.symfony.com/3.1/Symfony/Component /HttpFoundation/Request.html) para los métodos utilizados en el objeto $ request. – cpxPratik

Cuestiones relacionadas