Partage
  • Partager sur Facebook
  • Partager sur Twitter

Json dans un twig

    30 janvier 2023 à 21:29:08

    Bonjour à tous, j'ai put concevoir fichier PHP qui peur me générer un json correct, donc comme cette capture d'ecran:

    Mais mon Controller me générè ce Json qui n'es pas exploitable:

    Voici mon fichier php qui fonctionne:

    <?php
    
    
    // Sample array
    $data = array("1" => "Apple", "2" => "Ball", "3" => "Cat");
    
    header("Content-Type: application/json");
    echo json_encode($data);
    exit();
    ?>

    Voici mon controller:

    <?php
    
    namespace App\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    class JsonController extends AbstractController
    {
        #[Route('/json', name: 'app_json')]
        public function index(): Response
        {
    
    
           
    $data = array("1" => "Apple", "2" => "Ball", "3" => "Cat");
            
        
    
     
    
     
    
            
    
            return new JsonResponse([
     
           $this->renderView('json/index.html.twig', [ 'data' => $data,]/* template parameters goes here */),
            ]);
    
    
    
        }
    }
    

    Et voici mon twig:

     	 {% for  data in  data %}
    
    {{ data|json_encode() }}
    
    {% endfor %}

    Cordialement



    • Partager sur Facebook
    • Partager sur Twitter
      30 janvier 2023 à 23:16:44

      Bonjour, j'imagine que les données sont invalide car tu passes une vue Twig en paramètre à JsonResponse au lieu d'un tableau associatif.

      comme $data est déjà un tableau associatif, tu devrais pouvoir renvoyer les données de cette façon:

      $data = array("1" => "Apple", "2" => "Ball", "3" => "Cat"); 
      
      return new JsonResponse($data);

       Pourquoi tu essais de passer un vue Twig au JsonResponse ??

      La classe est (globalement) un raccourcie de ce que tu as fait manuellement dans le premier fichier soit:

      // Sample array
      $data = array("1" => "Apple", "2" => "Ball", "3" => "Cat");
       
      header("Content-Type: application/json");
      echo json_encode($data);
      exit();

      Donc il faut aussi un tableau associatif a JsonResponse pour travailler de la même façon que la fonction json_encode.

      Tu peux voir le détail de l'implémentation de la classe JsonResponse pour la version 6.3 de Symfony:

      symfony/JsonResponse.php at 6.3 · symfony/symfony · GitHub

      Tu peux aussi trouver des exemple d'utilisation de la classe JsonResponse sur la documentation de Symfony pour la version current (soit 6.x):

      The HttpFoundation Component (Symfony Docs)

      -
      Edité par SamuelGaborieau3 30 janvier 2023 à 23:17:02

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        30 janvier 2023 à 23:45:13

        Merci de ta réponse, je voudrait passé un json dans le Twig pour pouvoir utiliser le bundle liip_imagine dans le twig pour générer des images au dimension voulu.
        • Partager sur Facebook
        • Partager sur Twitter
          31 janvier 2023 à 2:50:43

          Si tu veux passer un JSON dans le Twig tu doit juste pouvoir faire cela:

          $this->renderView('json/index.html.twig', [ 'data' => $data,]/* template parameters goes here */)


          Sans utiliser JsonResponse.

          Le 2iem paramètre de renderView sert déjà à envoyer des données a Twig.

          • Partager sur Facebook
          • Partager sur Twitter

          suggestion de présentation.

            31 janvier 2023 à 7:56:11

            Vrai question aussi mais pourquoi entre le $data et le return il y a 8 sauts de lignes ?

            Et aussi les tableaux s'écrivent maintenant (enfin depuis 10 ans) sous la forme "[ ]".

            Change aussi le nom du contrôleur qui ne reflètent pas ce qu'il est sensé faire.

            • Partager sur Facebook
            • Partager sur Twitter

            Json dans un twig

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown