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 :

Données d'une liste déroulante [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 23
    Points
    23
    Par défaut Données d'une liste déroulante
    Bonjour,

    Apprenti dans le frameWork symfony, je souhaite réalisé une liste déroulante dans un formulaire généré par Doctrine.

    Ces données sont dans une autre table (typedemande) que celle utilisée pour réaliser le formulaire et sont reliées par une clé étrangère.

    La génération de mon formulaire m'a donc crée la liste déroulante mais avec des champs vides avec des values correspondants au ID de typeDemande.

    J'ai donc crée une fonction dans typeDemandeTable afin de récupérer les valeurs qui m’intéresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public function getTypes()
      {
         $q = Doctrine_Query::create()
          ->select("c.nom")
          ->from("typeDemande c");
     
         return $q->fetchArray();
      }
    Ensuite dans la fonction configure() de mon formulaire j'ai modifié mon widget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema['typeDemande'] = new sfWidgetFormSelect(array('choices'  => array_keys(Doctrine_Core::getTable('typeDemande')->getTypes())));
    Mais cela ne change rien. Quelqu'un a une idée? Merci.

  2. #2
    Membre actif Avatar de firehist
    Homme Profil pro
    Intégrateur Web Freelance
    Inscrit en
    Février 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 151
    Points : 214
    Points
    214
    Par défaut
    Si ces données sont reliées par une clé étrangère, il te suffit de mieux décrire ta base de données dans le schema.yml avec les relations.

    En faisant un build de ton application, cette liste déroulante doit apparaître dans ton formulaire.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Ma liste déroulante s'affiche bien, mais elle affiche les ID de typedemande, moi je veux quel affiche le nom.
    J'ai utilisé 'relation' dans mon schema.yml, peut être que je l'ai mal utilisé?

    typeDemande:
    columns:
    nom : { type: string(255) }
    description : { type: LONGTEXT }

    contact:
    columns:
    typeDemande_id: { type: integer, notnull: true }
    nom : { type: string(255) }
    prenom : { type: string(255) }
    adresse : { type: string(255) }
    ville : { type: string(255) }
    codePostal : {type : integer, notnull: true}
    email : { type: string(255) }
    telephone : { type: string(255)}
    description : { type: LONGTEXT }

    relations:
    typeDemande: { onDelete: CASCADE, local: typeDemande_id, foreign: id, foreignAlias: contact}

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    J'ai trouvé une solution :

    J'ai ajouté dans le model (fichierTable) :
    public function getFormChoiceName()
    {
    $types = self::getName();
    foreach($types as $type)
    {
    $array[$type->getId()] = $type->getNom();
    }
    return $array;
    }
    Et j'ai ajouté dans la configure de mon formulaire :

    $this->widgetSchema['type_Devis_id'] = new sfWidgetFormSelect(array(
    'choices' => array(Doctrine::getTable('TypeDevis')->getFormChoiceName())

  5. #5
    Membre habitué Avatar de Romanops
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 278
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    J'ai le même problème que ctek59, mais je me demande s'il y a moyen que ça soit automatique une fois généré l'application, comme l'explique firehist.

    Voici mon fichier schema.yml :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    # config/doctrine/schema.yml
    Race:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
        description: { type: string(4000), notnull: true }
     
    Genre:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
        description: { type: string(4000), notnull: true }
     
    Nature:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
        description: { type: string(4000), notnull: true }
     
    Personnage:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
        forc: { type: integer, notnull: true }
        constitution: { type: integer, notnull: true }
        dexterite: { type: integer, notnull: true }
        beaute: { type: integer, notnull: true }
        intelligence: { type: integer, notnull: true }
        volonte: { type: integer, notnull: true }
        persuasion: { type: integer, notnull: true }
        charisme: { type: integer, notnull: true }
        vie: { type: integer, notnull: true }
        fatigue: { type: integer, notnull: true }
        experience: { type: integer, notnull: true }
        points: { type: integer, notnull: true }
        race_id: { type: integer, notnull: false }
        genre_id: { type: integer, notnull: false }
        age: { type: integer, notnull: true }
        alignement: { type: integer, notnull: true }
        nature_id: { type: integer, notnull: false }
        employeur_id: { type: integer, notnull: false }
      relations:
        Race: { onDelete: CASCADE, local: race_id, foreign: id, foreignAlias: Personnages }
        Genre: { onDelete: CASCADE, local: genre_id, foreign: id, foreignAlias: Personnages }
        Nature: { onDelete: CASCADE, local: nature_id, foreign: id, foreignAlias: Personnages }
        Personnage: { onDelete: CASCADE, local: employeur_id, foreign: id, foreignAlias: Personnages }
    Lorsque j'affiche une liste select en html dans un formulaire pour personnage, le champ affiché est la description pour toutes les clés étrangères, et pas le nom comme je le souhaiterai !

    Comment résoudre ceci ?

    Merci d'avance
    En vous remerciant, bonsoir.

  6. #6
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    Symfony/Doctrine quand il a besoin d'afficher une "description" à la place de l'id cherche (via la fonction __toString()) le champ name dans la table.

    Au vu de vos schéma respectif, vous n'avez pas de champ name mais un champ nom.

    Donc 2 possibilité, soit vous renommer vos champs soit vous modifier la fonction __toString:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function __toString()
    {
      return $this->getNom();
    }

  7. #7
    Membre habitué Avatar de Romanops
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 278
    Points : 165
    Points
    165
    Par défaut
    En suivant vos conseils, j'ai rajouté la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      public function __toString()
      {
        return $this->getNom();
      }
    Dans mes classes comme Race.class.php (dans ./lib/model/doctrine), et ça fonctionne à merveille. Merci !!
    En vous remerciant, bonsoir.

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

Discussions similaires

  1. [MySQL] comment insérer des données d'une liste déroulante dans un champ texte
    Par berti dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/01/2008, 09h12
  2. Réponses: 3
    Dernier message: 11/10/2007, 12h18
  3. Réponses: 2
    Dernier message: 19/07/2007, 17h01
  4. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27
  5. Comment faire pour récup une donnée d'une liste déroulante
    Par magic8392 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/03/2005, 15h00

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