2012-03-15 22 views
5

Attualmente sto lavorando a un progetto basato su symfony2 con un sacco di utilizzo di ajax.Come posso ricevere un JSON in symfony2

Ora voglio inviare un JSON tramite $.ajax(); (tipo POST) e gestirlo in un controller symfony2. Ma non sono abbastanza sicuro di come accedo al JSON all'interno del controller.

In questo momento ho ottenuto il seguente:

JS:

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

E PHP:

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

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

L'unica cosa che non so è come posso accedere il JSON? Sono sicuro che è piuttosto semplice, ma non lo vedo. Grazie per il tuo aiuto!

+1

Si dovrebbe prendere uno sguardo alla FOSRestBundle: https://github.com/FriendsOfSymfony/FOSRestBundle – igorw

risposta

3

il codice penso non è completa, se si desidera inviare i dati al server con il formato JSON penso che la messa a punto $ .ajax come questo, proprio esempio

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

parametro aggiuntivo JSONFile o qualunque cosa vuoi .e puoi usare json decode per recuperare JSON dal client.

questo è il codice 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 accesso diretto del controller di Symfony2 $_POST è male in modo da utilizzare richiesta $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

+5

Anche se questo funziona ed è semplice, accedere a '$ _POST' direttamente non è un buon modo per farlo con Symfony 2. La risposta di jBinfo è molto meglio. – chiborg

+0

yup il mio codice solo esempio in php, in Sysmfony 2 forse per ottenere parametri e preferisco la sicurezza alta che sarà caso diverso. per ottenere parametri puoi usare '$ request-> request-> get ('JSONFile'); // ottiene un parametro $ _POST' – viyancs

+1

sto aggiornando la mia risposta. – viyancs

13

nella richiesta Ajax u deve impostare il tipo di contenuto a application/json :

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

e nel controller utilizzare questo per analizzare il contenuto:

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

Per ulteriori informazioni, dare un'occhiata a questo libro di cucina di Silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

+0

È '$ request-> request-> replace (is_array ($ data)? $ Data: array());' Vedere api [qui] (http://api.symfony.com/3.1/Symfony/Component /HttpFoundation/Request.html) per i metodi utilizzati sull'oggetto $ request. – cpxPratik

Problemi correlati