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 :

récupérer la description d'une clef externe dans indexSuccess


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut récupérer la description d'une clef externe dans indexSuccess
    bonjour,
    je débute avec symfony et j'ai encore quelque petit problèmes de compréhension.

    Dans une table country, j'ai un champ idcontact qui fait référence à une table user.
    Dans la page editSuccess et newSuccess j'ai bien une liste déroulante qui reprend la désignation que j'ai creer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class User extends BaseUser
    {
    	public function __toString() {
    		return $this->getLastname().' '.$this->getFirstname();
    	}
    }
    mais dans la page showSuccess et indexSuccess je n'ai que l'id
    que doit-je modifier pour visualiser le nom du contact et non son id ?

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    Tu travailles avec un admin generator j'imagine. Dans ce cas, dans le fichier generator.yml, dans le paramètre "list: display", au lieu de idContact, indique "User" (ou Contact mais j'imagine que idcontact correspond à iduser).

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    heu non, je suis vraiment au début.
    j'ai créé ma table, généré mon module en frontend.
    je vient de contrôler j'ai pas de fichier generator.yml.
    Par contre idContact dans la table country correspond bien au champ idUser de la table user.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    erf j'ai mal decrit mon probléme ou bien la réponse est dans la doc mais j'ai mal cherché ?

    je suis sur que c'est possible de faire ça.

  5. #5
    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
    Dans un premier temps, je pense que tu aurais intérêt à poser les bases d'un bon travail sous symfony, un schema conforme aux normes symfony, doctrine. Ce n'est pas indispensable, mais c'est plus simple à utiliser et tous le monde comprend mieux de quoi tu parle.

    Par exemple, tu parles d'un iduser dans la table user, la norme voudrait que la clef par défaut soit id. Ce qui permet de récupérer l'Id par $user->getId() plus clair et léger que $user->getUserId().

    Et surtout, symphony va comprendre que tu parles d'une clef primaire et l'utiliser là où tu oublierais de la déclarer.

    De la même manière, pour un champ lier, le nom standard serait dans la table contact pour un user serait user_id. Si tes liaisons sont correctement configurée, tu vas récupérer l'id du user en contact par $contact->getUserId(), mais surtout tu vas récupérer l'objet user par $contact->getUser() et pour un user, la collection des contact par $user->getContacts().

    A condition que ton schema soit correctement défini.

    Pour en venir à ta question, l'affichage d'un objet par défaut (si tu ne précise pas de nom de méthode) utilise le return de la méthode __toString().

    Par contre, dans l'action edit, tu vas généralement utiliser un objet form alors que l'action show ce contente d'afficher sans "intelligence". Donc, si ton schéma est correcte, dans le show, tu vas récupérer le nom de l'utilisateur d'un contact par echo $contact->getUser(). Si le schéma est conforme et les relations correctement définies et la méthode __toString() correcte.

    Attention, ta méthode présente un danger. En effet, tu retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->getLastname().' '.$this->getFirstname();
    fondamentalement juste, mais si un des deux champs est vide (null), la concaténation va retourner une chaine vide. L'écriture suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return "$this->getLastname() $this->getFirstname()";
    permet d'éviter le problème.

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    effectivement en renommant les champs cela marche mieux, je commence à comprendre la logique.
    Par contre ton astuce:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return "$this->getLastname()  $this->getFirstname()";
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->getLastname()." ".  $this->getFirstname();
    me déclenche une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Method sfOutputEscaperIteratorDecorator::__toString() must not throw an exception in /home/mu8639/web/sfprojects/it_toolbox/apps/frontend/modules/country/templates/indexSuccess.php on line 25

  7. #7
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    Citation Envoyé par mimi68 Voir le message
    Je pense que tu aurais intérêt à [ ...faire... ] un schema conforme aux normes symfony, doctrine.
    Je débute également sous symfony.
    Existe-t-il une sorte de cheat list donnant l'ensemble de ces normes de définition des bases de données façon symfony ?

    S'il en existe en dehors des suivantes :
    Clé primaire : number avec incrément automatique appelé id
    Clé étrangère : appelée table_id

    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
    J'ai récupéré, je regarde...

    Mais cela va prendre un peu de temps !

  9. #9
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    Merci.
    Ça n'a rien d'urgent (d'autant que je prends mes congés très bientôt).

  10. #10
    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
    Je remet alors à encore u peu plus loin, j'ai éclaté mon précédent portable et le nouveau est en cours d'installation, mais les 64x ne s'installent pas aussi facilement.

    J'ai un contrat sur paris la semaine prochaine, je verrais cela fin juillet.

  11. #11
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    Parfait.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2011, 16h17
  2. Récupérer la description d'une <option> dans une varibale
    Par karim_sousse dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 01/07/2010, 19h32
  3. [XHTML11] Comment insérer une page externe dans une page ?
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/03/2005, 20h43
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 22h06
  5. Récupérer le Handle d'une Appli externe
    Par luxprog dans le forum Windows
    Réponses: 15
    Dernier message: 29/04/2004, 14h47

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