IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

impossible de lire l objet json renvoyé par mon controller symfony


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut impossible de lire l objet json renvoyé par mon controller symfony
    bonjour je reviens avec un autre sujet.
    en fait j essais de generer les graph avec la librerie morris.js, pour cela,
    j ai renvoyé un objet json ( outgoingmobiles )dans ma page twig depuis mon controller.
    quand je fais donc un {{dump(outgoingmobiles)}} ou un {{outgoingmobiles}} j ai bien le resultat attendu; ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [
    {"startTime":"2016-06-09 00:00:00","callAttempts":2036},
    {"startTime":"2016-06-10 00:00:00","callAttempts":2132},
    {"startTime":"2016-06-11 00:00:00","callAttempts":2100},
    {"startTime":"2016-06-12 00:00:00","callAttempts":1407},
    {"startTime":"2016-06-13 00:00:00","callAttempts":2137},
    {"startTime":"2016-06-14 00:00:00","callAttempts":2055},
    {"startTime":"2016-06-15 00:00:00","callAttempts":2039}]
    mais quand je lui passe à fonction morris() commee ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		<script type="text/javascript">
        	var elt = {{outgoingmobiles|json_encode()|raw}};
     
    			  Morris.Bar({ element: 'tutoriel',
    			                data:elt, //objet json
    			                xkey:'startTime',
    			                ykeys:['callAttempts'],
    			                labels:['vue']
    			  });
    		</script>
    je n ai aucun resultat mais quand je copie le resultat du {{dump(outgoingmobiles)}} affiché sur mon navigateur et que je le passe en dure à mon var elt comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
           {% set data [
               {"startTime":"2016-06-09 00:00:00","callAttempts":2036},
                {"startTime":"2016-06-10 00:00:00","callAttempts":2132},
                {"startTime":"2016-06-11 00:00:00","callAttempts":2100},
                {"startTime":"2016-06-12 00:00:00","callAttempts":1407},
               {"startTime":"2016-06-13 00:00:00","callAttempts":2137},
              {"startTime":"2016-06-14 00:00:00","callAttempts":2055},
              {"startTime":"2016-06-15 00:00:00","callAttempts":2039}
            ] %}
    	<script type="text/javascript">
        	var elt = {{data|json_encode()|raw}};
     
    			  Morris.Bar({ element: 'tutoriel',
    			                data:elt, //objet json
    			                xkey:'startTime',
    			                ykeys:['callAttempts'],
    			                labels:['vue']
    			  });
    		</script>
    cela me genere mon graph.
    je ne comprend pas ce qui ce passe. quelqu'un peux m aider svp?

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var elt = {{outgoingmobiles|json_encode()|raw}};

    tu encodes outgoingmobiles en json alors qu'il est déjà en json
    ensuite outgoingmobiles tu appliques raw donc tu lui dit d'interpreter les balises, mais quelle balise ??? c'est du json

    bref 2 choses inutiles !!!

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    oui je sais c est un peu bizar de d encoder outgoingmobiles mobile alors que c est deja du json mais tu vas trouver encore plus bizar quand je te dis qu apres avois copié le resultat affiché apres mon {{dump(outgoingmobiles)}}; et passé en dure à mon {% set data[]= [... //contenu de mon json ]%} ;
    lorsque je fais dans mon javascript ceci :
    je n ai pas mon resultat. mais lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var elt = {{data|json_encode()|raw}};
    j obtien le resultat attendu, pourtant tout comme outgoingmobile, data est aussi du json.
    en ce qui conserne le var elt = {{outgoingmobiles|json_encode()|raw}}; meme lorsque je fais sans mettre le |json_encode()|raw ou san le |raw, j ai toujours rien.
    j ai jamais eu une erreur aussi bizar.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    une derniere chose quand je fais {{data[0].startTime}} j ai le temps mais quand je fais {{outgoingmobiles[0].startTime}} j ai rien.
    queske tu en dis?

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    pour voir la structure tu peux faire un dump.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ dump(outgoingmobiles) }}
    analyse la structure...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    oui je l ai fais plus haut et j ai eu ceci comme resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string(1625) "[
    {"startTime":"2016-06-09 00:00:00","callAttempts":2036},
    {"startTime":"2016-06-10 00:00:00","callAttempts":2132},
    {"startTime":"2016-06-11 00:00:00","callAttempts":2100},
    {"startTime":"2016-06-12 00:00:00","callAttempts":1407},
    {"startTime":"2016-06-13 00:00:00","callAttempts":2137},
    {"startTime":"2016-06-14 00:00:00","callAttempts":2055},
    {"startTime":"2016-06-15 00:00:00","callAttempts":2039}]"
    j esper que c est pas le petit string du debut qui est la cause du probleme.

  7. #7
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    bah si. c'est normal puisque tu n'as pas compris les mécanismes de l'encodage et le décodage json.
    on encode et on décode !
    tu as quelque chose d'encodé, il faut le décoder pour l'utiliser. c'est logique non ?

    j'ai l'impression que tu fais les choses sans savoir, renseigne toi sur JSON : les mécanismes, son utilité etc.... une fois cette étape effectué tu comprendras mieux ce qu'il faut ou ne pas faire.....

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    tu as raisons je ne metrise pas vraiment ce mecanisme d encodage et de decodage. c est juste que à une etape de mon projet j ai ete obligé d utiliser une librerie javascript et qui a des fonction qui n accepte que du JSON. j ai donc cherché tous ce qui pouvais m aider pour faire juste ce travail là sans trop vouloir comprendre la chose en profondeur. mais c est pas trop dans mes habitudes hein; c est que je travail sous pression.
    donc ce que je dois faire pour utiliser directement avec mon outgoingmobile c est le decoder?
    je vais donc voir ce que je peux trouver sur le decodage.
    merci pour ta reponse.

  9. #9
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    le mieux est de json_decode dans le controlleur, tu le passes à la vue.
    et voilà dans la vue, tu l'utilises tel quel !!


    json_encode permet de mettre sous forme un tableau ou un objet en format String.
    après pour utiliser et retrouver l'objet ou le tableau du départ, tu le décodes avec json_decode .... c'est simple, mais faut le savoir....



    et pourquoi on transforme un objet ou un tableau en json (en string)? pour pouvoir le transporter dans une requete... et oui une requete transporte que des données textuels..... rien d'autres.....
    et donc json permet de faire circuler des objets et tableaux via des requetes !!!!

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    << et pourquoi on transforme un objet ou un tableau en json (en string)? pour pouvoir le transporter dans une requete... >>
    je crois que je n aurais meilleur explication que celle ça. maintenant je vais essayer de l appliquer sur mon travail. en esperant que mon prochain poste serait pour te dire un merci d aurevoir; parce que là je suis vraiment vraiment largué.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 29
    Par défaut
    OUUUFFF!!!!! j ai pus resourdre mon probleme finalement.
    en fait dans mon controlleur je transformais un tableau associatif en objet json avec jsonResponse. comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // ici $dataTmp est un tableau associatif deja remplis
    $outgoingmobiles= new JsonResponse($dataTmp);
    								return $this->render('SoutenanceCamtelBundle:Memoire:testForm.html.twig',
    									array('outgoingmobiles'=>$outgoingmobiles));
    et c est le $outgoingmobiles que je retournais a twig, où toutes les manœuvres que je lui appliquaient étaient sans succes. mais quand je me suis rappelé que json transforme les tableaux en chaine. j ai juste directement renvoyé le tableaux $dataTmp sans plus le transformer avec jsonResponse; et dans twig je fais just ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		<script type="text/javascript">
     
        	var elt = {{dataTmp|json_encode()|raw}};
    			  Morris.Bar({ element: 'tutoriel',
    			                data:elt, 
    			                xkey:'startTime',
    			                ykeys:['callAttempts'],
    			                labels:['vue']
    			  });
     
    		</script>
    et hop!! j ai mon graph.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/08/2016, 12h27
  2. Réponses: 0
    Dernier message: 25/09/2010, 12h56
  3. Impossible de lire les fichiers AVI créés par OpenCV
    Par cjacquel dans le forum OpenCV
    Réponses: 1
    Dernier message: 12/01/2009, 12h51
  4. Réponses: 1
    Dernier message: 09/06/2008, 17h32
  5. Réponses: 6
    Dernier message: 24/08/2006, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo