Blog


Utiliser JsonResponse pour vos retours en Json

Le , par .

Dans le cadre d'une API, d'appels en AJAX ou autres, vous avez déjà certainement retourné des données en Json.

Plutôt que de manuellement encoder en Json et de définir soi-même le type de la réponse, il existe une classe discrète mais bien utile qui fait tout à votre place. Il s'agit de JsonResponse, que je vous invite à consulter.

Cette classe est tellement pratique que vos retours Json ne se font désormais plus qu'en une seule ligne, voyez par vous-mêmes :

use Symfony\Component\HttpFoundation\JsonResponse;

public function fooAction()
{
    $data = $this->getDoctrine()
                 ->getManager()
                 ->getRepository('Bundle:Entity')
                 ->findAll();

    return new JsonResponse($data);
}

Inutile d'utiliser json_encode() sur vos données (ici $data), et inutile également de définir le Content-type adéquat pour la réponse. Bref, du gain de code, donc du bonheur !

Retour à la liste

Commentaires

Le , a écrit :

Test


Le , a écrit :

cvbn


Le , a écrit :

yhter


Le , a écrit :

Merci !


Le , a écrit :

J'arrive pas à récupérer les valeurs des attributs dans le json. En fait, je veux les valeurs du Json pour remplir mon datagrid fait avec JQuery EasyUi, quelqu'un peut m'aider?


Le , a écrit :

Trés méthodique


Le , a écrit :

comment je peux creer un slider avec ajax ??


Le , a écrit :

Very nice site!


Le , a écrit :

That is some inspirational stuff. Never knew that opinions could be this varied. Be certain to keep writing. kceeakfdkfdeeebf


Le , a écrit :

Salut à tous, salut Winzou,

J'utilise JsonResponse comme tu le fais pour renvoyer un fichier au format json à ma requête ajax. En mode dev cela fonctionne parfaitement. En mode prod, le prog ne passe pas par la fonction success de ma requête ajax mais par error.

Lorsque j'affiche le fichier json reçu depuis ma requête, avec alert(reponse.responseText);

En mode dev, le alert est vide.

En mode prod, le alert contient: align='right'>7345280Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle( ):71 [{"id":11,"nom":"foot"}]

J'ai perdu pas mal de cheveux depuis hier soir. Si quelqu'un passe par là et a un idée, je lui en serais très très reconnaissant.


Le , a écrit :

C'est sympa les enfants, merci.


Le , a écrit :

Merci beaucoup pour le partage de cette information. Vraiment très pratique et effectivement un gros gain de code.


Le , a écrit :

Merci!


Le , a écrit :

foreach($liste_competences as $i => $competence) { // On crée une nouvelle "relation entre 1 article et 1 compétence" $articleCompetence[$i] = new ArticleCompetence;

...

} pourquoi passer par des tableaux... un peu étonnant. Il suffit de faire $artcomp = new ArticleCompetence() et $em->persist($artcomp)... et ce pour chaque boucle. C'est une démarche que l'on retrouve un peu partout

Sinon excellent tuto

Merci


Le , a écrit :

Petite correction :

Le profiler me dit : Field 'name' in class 'MyBundle\MyEntity' must be private or protected. Public fields may break lazy-loading.

Je passe donc ce champ en private ou protected, plus d'erreurs dans le profiler. Mais Objet JSON vide.

Une fois repasser ce(ces) champ(s) en public, l'objet JSON est complet.

Paradoxe oO


Le , a écrit :

Information intéressante. Mais mon objet est vide !

Ai-je loupé quelque chose ?


Le , a écrit :

On n'est pas obligé de tout le temps faire du REST ;)


Le , a écrit :

faut voir la qualité du retour aussi, c'est pas du tout "REST" friendly on va dire :) mais pour de l'applicatif front ça fait l'affaire ;)


Poster un nouveau commentaire