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 :

serializer, DOMDocument et XmlEncoder [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut serializer, DOMDocument et XmlEncoder
    bonjour à tous,
    depuis deux jours je cherche comment modifié la balise initiale donnée lors de la sérialisation.
    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
    21
    22
    23
    24
     
    <?php
    $request = Request::createFromGlobals();
    $Platform=$request->query->get('platform');//paramètre guetter depuis l'url
    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('BetappliApplicationBundle:Application')->findBy(array('platform'=>$Platform));
     if($Platform=='android'||$Platform=='ios'||$Platform=='ipad') 
      {
    foreach ($entity as $r) { 
    $em= $this->getDoctrine()->getEntityManager();
    $build = $em->getRepository('BetappliApplicationBundle:Build')->findBy(array('application'=>$r->getId()));
    foreach ($build as $b){
    $xml[] =$b->toArray();//fonction définit pour associé chaque appl et son build 'relation entre ces deux entités'
    }
    }
    $xml = $serializer->serialize(array('application'=>$xml), 'xml');
    return new Response($xml);
    }
    else
    {
    $xml = $serializer->serialize(array('error' => $error), 'xml');
    return new Response($xml);
    }
    ?>
    si je fais $xml = $serializer->serialize($xml, 'xml'); j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <response>
    <item key="0">
      ................ 'mes fonctions appelées' toArray
    </item>
    <item key="1">
    .................. 'mes fonctions appelées' toArray
    </item>
    </response>
    $xml = $serializer->serialize(array('application'=>$xml), 'xml');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <response>
    <application>
    ................. 'mes fonctions appelées' toArray
    </application>
    <application>
    ................. 'mes fonctions appelées' toArray
    </application>
    </response>
    je n'ai pu modifie la balise <application> pour en avoir une balise <application Id= 'num de l'application'> et meme j'ai recherché au niveau de DOMDocument avec la creation de balise je n'ai pu atteindre mon objectif.
    Est ce que vous avez une idée SVP?
    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    il faut rajouter un attribut en mettant @ devant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use Symfony\Component\Serializer\Encoder\XmlEncoder;
     
    $array = array(
        'application' => array('@id' => 'test', 1, 2, 3),
    );
     
    $encoder = new XmlEncoder;
    echo $encoder->encode($array, null);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <response>
        <application id="test">
            <item key="0">1</item>
            <item key="1">2</item>
            <item key="2">3</item>
        </application>
    </response>

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut
    Merci infiniment pour ton aide,
    mais si je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $xml = $serializer->serialize(array('application'=>array('@id' =>'1',$xml)), 'xml');
     return new Response($xml);
    j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <response>
    <application id="1">
    <item key="0">
    <item key="0">
    ......... 
    </item>
    </item>
    </application>
    </response>
    j'ai pas pu eliminer <item key="0"> pour avoir seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <response>
    <application id="1">
    ......
    </application>
    </response>
    Merci pour ton aide.
    comment je peut eliminer ces balises SVP?
    Merci

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est pas comme ça, regarde bien l'attribut est dans la meme list que les enfants
    donc un array_merge ou un direct un ajout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $serializer->serialize(array('application'=>array('@id' => 1) + $xml)), 'xml');
    ps: revoie ton controller parce que c'est du grand nawak

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut
    Merci pour ton conseil que j'ai suivi
    mais meme avec ton code un direct ajout il y a
    Parse error: syntax error, unexpected ',' !!
    et avec array_merge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $serializer->serialize(array('application'=>array_merge('@id' => 1),$xml)), 'xml');
    j'obtient l'erreur Parse error: syntax error, unexpected T_DOUBLE_ARROW
    Merci.comment je dois faire?excuse moi de t'importuner et Merci

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $serializer->serialize(array('application'=>array_merge('@id' => 1),$xml), 'xml');
    pour le array_merge c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $serializer->serialize(array('application'=>array_merge(array('@id' => 1),$xml)), 'xml');
    suffit de relire un peu ...

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    donc un array_merge ou un direct un ajout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Set serial Number sur une disquette
    Par Cpet dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/12/2004, 10h24
  2. boost::serialize
    Par Fry dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 05/11/2004, 18h03
  3. type serial : pb
    Par xopos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/09/2004, 09h08
  4. [DB2 V7 & V8] equivalent du type SERIAL
    Par geoffrey_k dans le forum DB2
    Réponses: 3
    Dernier message: 05/07/2004, 14h09
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

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