96 votes

Comment puis-je envoyer de réponse json dans symfony2 contrôleur

J'utilise jQuery pour modifier mon formulaire qui est construit dans Symfony.

Je suis en train de montrer le formulaire en jQuery boîte de dialogue, puis de le soumettre.

Les données à entrer correctement dans la base de données.

Mais je ne sais pas si j'ai besoin d'envoyer de JSON retour à jQuery. En fait, je suis un peu confus avec JSON chose.

Supposons que j'ai ajouté une ligne dans ma table avec jQuery et quand je soumet le formulaire, une fois que les données soumises je veux envoyer les données de la ligne de sorte que je peux ajouter dynamiquement la ligne du tableau pour afficher les données ajoutées.

Je suis confus comment peut obtenir que les données de retour

C'est mon code actuel

$editForm = $this->createForm(new StepsType(), $entity);

$request = $this->getRequest();

$editForm->bindRequest($request);

if ($editForm->isValid()) {
    $em->persist($entity);
    $em->flush();

    return $this->render('::success.html.twig');               
}

C'est juste le modèle avec message de réussite

199voto

Vitaliy Zurian Points 7870

Comment puis-je envoyer de réponse JSON dans symfony2 contrôleur?

Répondant à la question dans le titre - selon les docs dans votre Contrôleur, vous pouvez faire:

$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');

return $response;

Et dans Symfony2.1 vous avez même spécial JsonResponse classe, qui sérialise tableau JSON:

return new JsonResponse(array('name' => $name));

Mais si votre problème est Comment sérialiser entité , alors vous devriez jeter un oeil à JMSSerializerBundle

En supposant que vous avez installé, vous aurez simplement à faire

$serializedEntity = $this->container->get('serializer')->serialize($entity, 'json');

return new Response($serializedEntity);

Vous devriez également vérifier pour des problèmes similaires sur StackOverflow:
La façon de coder les entités Doctrine de JSON dans Symfony 2.0 application AJAX?
Symfony 2 Doctrine export JSON

56voto

jmaloney Points 1008

Symfony 2.1 a un JsonResponse classe.

return new JsonResponse(array('name' => $name));

Le passé dans la gamme sera encodé en JSON le code de statut par défaut est de 200 et le type de contenu sera défini en application/json.

Il est également pratique pour setCallback fonction pour JSONP.

11voto

Slava Fomin II Points 1141

Pour terminer @thecatontheflat de la réponse, je recommande également d'emballer votre action à l'intérieur d'un try ... catch bloc. Cela permettra d'éviter votre JSON extrémité d'arrêt sur les exceptions. Voici le squelette que j'utilise:

public function someAction()
{
    try {

        // Your logic here...

        return new JsonResponse([
            'success' => true,
            'data'    => [] // Your data here
        ]);

    } catch (\Exception $exception) {

        return new JsonResponse([
            'success' => false,
            'code'    => $exception->getCode(),
            'message' => $exception->getMessage(),
        ]);

    }
}

De cette façon, votre point de terminaison va se comporter de façon constante, même en cas d'erreurs et vous serez en mesure de les traiter à droite sur un côté client.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X