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 :

Meilleur méthode pour affichage libellé au lieu de l'id [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut Meilleur méthode pour affichage libellé au lieu de l'id
    Bonjour,

    je ne suis pas parvenu à trouver une discussion sur ce sujet, même si je pense qu'il y en as car cela doit être assez banale, je n'ai pas trouvé les bon termes pour ma recherche ...

    J'ai une table contenant des demandes qui ont chacune un statut.
    J'ai donc une table demandes avec un champ id_statut et une table statuts avec des enregistrements id_statut / lib_statut.

    A l'affichage de ma table des demandes, j'ai donc pour chaque ligne un id_statut. Et ce que j'aimerais savoir, c'est la meilleur façon de coder le fait que l'affichage soit non pas l'id_statut mais son libellé !

    J'ai procédé de cette façon, qui marche parfaitement, mais dans un souci d'optimisation de mon code, j'aimerais connaitre la meilleur façon de faire :

    Dans mon fichier indexSuccess.php qui affiche ma table demandes j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><?php echo D2iStatutsPeer::retrieveByPk($D2iDemandes->getIdStatut())->getTxtStatut() ?></td>
    Merci d'avance pour l'info !

    Bizoo

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Le plus simple est de renseigner une méthode 'magique' __toString() pour ton objet Statut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function __toString() { return $this->getLibelle(); }
    Tu devrais alors voir apparaître le résultat du __toString() à la place des ids, sans même avoir à modifier les templates.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut
    J'ai des méthodes __toString pour tous mes objets !

    Mais à l'affichage il est demander le $objet_demande->getIdStatut();

    Donc ça me retourne la valeur du champ id_statut de la table demande et donc ça ne fait aucun lien avec l'objet statut...

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Citation Envoyé par Bizoo Voir le message
    Mais à l'affichage il est demander le $objet_demande->getIdStatut();
    C'est curieux. Cela dit, je n'utilise que Doctrine, c'est peut-être spécifique à l'administration avec Propel auquel cas je ne peux pas t'aider. Mais à tout hasard : est-ce que la relation demande -> statut est bien déclarée dans le schema.yml ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut
    Oui oui tout est bien déclaré dans le schema !

    Je ne trouve pas étonnant que cela me retourne l'id car la fonction getId récupère la valeur du champ de l'objet, aucun lien n'est fait avec une autre classe, c'est un simple getter.

    Mais ce que je pensais, c'est qu'il y avait peut être une meilleur façon de faire en utilisant un partial ou je ne sais quoi approchant ...

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ta requête, bizarrement placée dans un template, elle devrait l'être dans le contrôleur, te retourne un objet.

    L'affichage d'un objet utilise __toString() si elle existe, c'est géré par symfony, donc indépendant de l'ORM utilisé.

    Vérifie si ton objet retourné est bien unique (quoique, vu la requête, je ne vois pas comment il pourrait être une liste).

    Vérifie si, à partir de l'objet tu peux afficher le toString par un
    $monObjet->__toString()

    Après, on va creuser ailleurs.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Citation Envoyé par Herode Voir le message
    Le plus simple est de renseigner une méthode 'magique' __toString() pour ton objet Statut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function __toString() { return $this->getLibelle(); }
    Tu devrais alors voir apparaître le résultat du __toString() à la place des ids, sans même avoir à modifier les templates.

    Oui mais ou renseigner cette méthode dans le modèle ?

    Comment l' appeler ensuite ?

    Merci.

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il n'y a pas d'appel à faire, c'est la méthode magique automatiquement appelée si on n'en précise pas d'autre.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Comment s' en servir ?

    Classique j' ai des champs ids que j' aimerai transformé en nom ou prenom..

    Ex: $contributor=>getContributorId()

    j'ai testé $contributor=>getContributorId()->__toString().

    PAs good..

  10. #10
    Membre éprouvé

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Par défaut
    __toString() est une méthode appelée lorsque l'objet a besoin d'être converti en chaîne de caractères.

    Par exemple lors d'une concaténation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maChaine = 'Mon objet : ' . $objet
    dans une vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $objet ?>
    Je ne connais pas bien propel, mais je ne comprends pas l'intérêt de vouloir absolument l'ID ?
    Si tu as ton objet tu fais tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $contributor ?>
    qui appellera __toString() de la classe Contributor

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

Discussions similaires

  1. [Référencement] Meilleure méthode pour liens invisibles ?
    Par Oluha dans le forum Référencement
    Réponses: 6
    Dernier message: 22/11/2005, 08h18
  2. Réponses: 2
    Dernier message: 18/11/2005, 16h29
  3. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  4. Meilleur méthode pour stocker mes données
    Par cyberlewis dans le forum Windows
    Réponses: 6
    Dernier message: 03/07/2004, 11h53
  5. Réponses: 3
    Dernier message: 24/06/2004, 11h23

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