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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 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 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
    j'ai beau lire et relire je ne comprends ta demande.

    pourquoi faire ? pourquoi json ?

  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
    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 émérite
    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
    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 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
    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 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
    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 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
    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 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
    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 émérite
    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
    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 !

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