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 :

creer un objet json avec symfony


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut creer un objet json avec symfony
    bonjour. je dispose d un objet mais j ai du mal à le retourner sous forme d objet json.
    dans mon controller j ai fais ceci:
    $livres = $em->getRepository('LivreTutoBundle:Livre')->findAll();
    mon entite Livre n'a que deux champs ( tuto et value )
    j aimerais avoir un objet comme ceci:
    <code> data:[
    {'tuto':'javascript', value:100},
    {'tuto':'PHP', value:140},
    {'tuto':'jquery', value:150},
    {'tuto':'Symfony2', value:190},
    {'tuto':'css', value:30},
    {'tuto':'html', value:10},
    ]</code>
    j ai entendu parler de jsonResponse mais je ne sais pas trop comment l utiliser.
    et mois personnellement j ai penser à faire une iteration du genre:
    <code>
    $data[] = array(); $i=0;
    foreach($livre in $livres){
    data[$i] = ('tuto'=> $livre.getTuto(), 'value'=> $livre.getValue());
    }
    </code>
    mais je ne sais pas quoi faire des accolades et en plus sa ne me semble pas optimal.
    petit aide svp

  2. #2
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    j'ai beau lire et relire je ne comprends ta demande.

    pourquoi faire ? pourquoi json ?

  3. #3
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par dukoid Voir le message
    j'ai beau lire et relire je ne comprends ta demande.

    pourquoi faire ? pourquoi json ?
    bonsoir dukoid.
    En fait j essais de generer des graphes avec la librerie morris.js comme ceci:

    <link rel="stylesheet" href="../morris.css">
    <script src="../jquery-2.1.1.js"></script>
    <script src="../raphael.min.js"></script>
    <script src="../morris.js"></script>

    <div id="tutoriel"></div>
    <script type="text/javascript">
    var elt=[

    {'date':'2011', value:100},
    {'date':'2012', value:140},
    {'date':'2013', value:150},
    {'date':'2014', value:190},
    {'date':'2016', value:30},
    {'date':'2010', value:10},
    ];
    Morris.Area({ element: 'tutoriel',
    data:elt,
    xkey:'date',
    ykeys:['value'],
    labels:['vue']
    });
    </script>

    et ce code marche tres bien d ailleur; mais l'ennuis ici c est que les valeur y sont stockées en dure et en plus elt est un objet JSON; j aimerais donc, depuis mon controller, gace au element reccuperé dans ma base de donnée, construire l' objet elt et le renvoyer dans mon fichier .html.twig afin de l utiliser dans ma fonction Morris.Area().

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Cool man,
    Si tu veux un retour purement json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    use Symfony\Component\HttpFoundation\JsonResponse;
    //
              $response = new JsonResponse();
                return $response->setData(array('livres' => $livres));
     
    //
           $.each(data.livres, function(index,value) {
                           elt.push(value);
                       });
    sinon tu peux aussi faire un simple retour avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'livres' =>json_encode($livres);
    et dans le script js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var elt=  {{livres|raw}};

  5. #5
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    just apres mon premier post, j ai continué les recherche avec le fameux jsonResponse et j ai pu avoir quelque chose; mais ca ne resoud pas encore mon pb.
    Un extrait de mon controller:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //...
    for ($mois=$moisDebut; $mois < $moisFin ; $mois++) { 								
        $outgoingmobiles[] = $em->getRepository('SoutenanceCamtelBundle:OutGoingMobile')
        ->getMoyennesMois('moyOne',$dateDebutRq, $dateFinRq, $_POST['typeCall'], $_POST['periode']);
    }
    	$json = json_encode(array(
    	     'outgoingmobiles' => $outgoingmobiles
    	 ));
    	  $response = new Response();
    	  $response->setContent($json);
              $response->headers->set('Content-Type', 'application/json');
    	 return new response($response); /* pour voir l objet obtenu */

    oui je sais ma variable $outgoingmobiles est un tableau d objet. en fait je dois réccupérer dans la BD une serie d element; et pas simultanément; d'ou le for.
    bon bref c etait pour que vous sachiez pourquoi le tableau d objet
    quand je fais le return, j obtient donc ceci comme resultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      [  [{"startTime":{"date":"2016-06-09 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2036.7917"}],
         [{"startTime":{"date":"2016-06-10 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2132.0000"}],
         [{"startTime":{"date":"2016-06-11 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2100.8750"}]
     ]

    mais le résultat n est pas vraiment celui attendu: je voulais un truc exactement comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     [ {"startTime": "2016-06-09 00:00:00","callAttempts":"2036.7917"},
       {"startTime":"2016-06-10 00:00:00" ,"callAttempts":"2132.0000"},
       {"startTime":"2016-06-11 00:00:00" ,"callAttempts":"2100.8750"}
     ]

    les crochais ([])dans les crochais apparaissent à cose du faite que j ai un tableau d'objet ( $outgoingmobile[] ) // c est verifié.
    en ce qui conserne ceci: {"date":"2016-06-09 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}; je ne sais pas pourquoi il vient comme ca.
    peut etre a cose du fait que mon attribut startTime est un dateTime. mais ca ne convient pas du tous.

    sa fait plus de 2 jour que je poirote pour ce problème sans solution. en peu d aide svp.

  6. #6
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    peux tu utiliser les balises codes et refaire ton message pour y voir plus claire

    pourquoi tu t'entetes avec jsonreponse, je ne comprends pas.

    dans le controller, tu récupères des données.
    ces données tu le passe à la vue comme n'importe quelle donnée.
    exemple ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tu construis ici ton  objet elt !  avec json_encode tu peux l'encoder.
    return $this->render('lucky/number.html.twig', array('elt' => $elt));


    dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .......code javascript............
     
    var elt = {{ elt }}; ou var elt = '{{ elt }}';      // je ne sais plus....
     
    alert(elt);

  7. #7
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    bonjour MehrezLabidi.
    avec ton code j ai le meme resultat. Le probleme c est que je ne sais pas comment avoir au final l objet sans les crochais qui apparaissent encore dans mon objet et aussi pourquoi j ai ceci : {"startTime":{"date":"2016-06-09 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2036.7917"} au lieu de
    {"startTime":"2016-06-09 00:00:00" ,"callAttempts":"2036.7917"} mon champ startTime est un dateTime tout simplement.
    un peu d aide svp.

  8. #8
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    bonjour dukoid.
    je te comprend quand tu dis ne pas savoir pourquoi je tient a passer par un jsonResponse.
    avant de poser mon probleme ici je faisais comme tu vien de le decrire. comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var elt ={{outgoingmobiles|json_encode()|raw}};
    mais quand je faisais un alert(elt ); on me disait que c est tout simplement un Objet et rien d autre. pour voir donc ce qui n allait pas j ai decidé de passer pas le
    controlleur. et là que j ai remaarqué que mon objet renvoyé etait un peu different. comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ [{"startTime":{"date":"2016-06-09 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2036.7917"}],
    [{"startTime":{"date":"2016-06-10 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2132.0000"}],
    [{"startTime":{"date":"2016-06-11 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"} ,"callAttempts":"2100.8750"}]
    ]

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    ok , j'explique .
    un JSON est une notation d'objet en javascript pas plus.
    Ainsi je te rappele que Datetime , Date et leurs derivés sont des objets , ils sont pas des string ou des integers .
    C'est des objets .
    Du coup , lorsque tu veux encoder ton array ca va marcher pour lui mais la dedans des objets qui vont etre encoder .
    D'ou ils ya des accolades dans des accolades .
    A ta place je convertis ces Date en string (en php ) et je me casse pas la tète car je crois pas que tu va utiliser timezone et timezone_type.

    Pour debug en php ,Pour debug en twig ,
    Pensez à valoriser les réponses pertinentes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    Une discussion est terminée ? Alors le bouton est votre ami !

  10. #10
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    ok merci pour l explication. un probleme de resolu. il reste le tout dernier
    et maintenant comment je fais avec les [] qui apparaissent sur chaque ligne. parce sue maintenant que j ai résolu le pb de datetime j ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     [ [{"startTime": "2016-06-09 00:00:00","callAttempts":"2036.7917"}],
       [{"startTime":"2016-06-10 00:00:00" ,"callAttempts":"2132.0000"}],
      [ {"startTime":"2016-06-11 00:00:00" ,"callAttempts":"2100.8750"}]
     ]
    mais je veux plutot ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     [ {"startTime": "2016-06-09 00:00:00","callAttempts":"2036.7917"},
       {"startTime":"2016-06-10 00:00:00" ,"callAttempts":"2132.0000"},
       {"startTime":"2016-06-11 00:00:00" ,"callAttempts":"2100.8750"}
     ]
    il faut que ce sois exactement comme ca si non ma fonction morris.Area() va le rejeter.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    c'est devenu une question pure javascript.
    un Crochet veux dire que c'est un tableau , c'est un array comme en php.
    Donc crochet qui contient des crochets , c'est un tableau qui contient des tableaux
    Il suffit de parcourir les tableaux résultants et de récupérer les valeurs et ensuite les ’insérer dans le tableau global.
    Meme principe que en php.
    J’espère que c'est clair.

    Pour insérer ou parcourir un tableau ou .. en js , juste Google it

  12. #12
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    ok bien compris; justement je pensais proceder ainsi. je m y mets.
    merci pour vos reponse.

  13. #13
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    finalemant j ai pu resourdre mon probleme. mon code:
    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
    //....
    for( ... **  ...){
    $outgoingmobiles[] = $em->getRepository('SoutenanceCamtelBundle:OutGoingMobile')                     ->getMoyennesJour('moyOne', $jour, $mois , $annee, $_POST['typeCall']);
    }                           $dataTmp = array();
                                    foreach ($outgoingmobiles as $outgoingmobile) {
                                        $dataTmp[] = [
                                            'startTime' => $outgoingmobile[0]['startTime']->format('Y-m-d H:i:s'),
                                            'callAttempts' => (float) $outgoingmobile[0]['callAttempts']
                                        ];
                                    }
                                    //$outgoingmobiles= new JsonResponse($dataTmp);
     
                                    $response = new Response();
                                    $response->setContent(json_encode($dataTmp));
                                    $response->headers->set('Content-Type', 'application/json');
                                    $response = $response->getContent();
                                    $outgoingmobiles = $response;
                                    var_dump($outgoingmobiles ) ;
    merci je peux continuer en douceur maintenant.

Discussions similaires

  1. JSON Java creer un objet JSON
    Par rimas2009 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/12/2010, 16h55
  2. Ajout d'attributs et methodes a plusieurs objets JavaScript avec JSON
    Par zarbi94 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2010, 18h20
  3. Remplir objet avec retour objet json
    Par steve3000 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/06/2009, 12h03
  4. [POO] parcourir un objet json avec une boucle for in
    Par bucheron007 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/01/2009, 12h55
  5. [JDOM] creer un fichier XML avec plus d'un objet
    Par palpy dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 02/06/2008, 15h10

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