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 :

afficher le contenu d'un champ issu d'une autre table dans un formulaire [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut afficher le contenu d'un champ issu d'une autre table dans un formulaire
    Bonjour,

    tout est dans le titre !


    J'ai un formulaire pour mettre à jour une table Compose qui est en fait une association entre deux tables, Action et Projet, mais pleine d'informations complémentaires.

    J'aimerais afficher le texte associé à l'identifiant de Action dans Compose (et que je connais déjà par ailleurs puisqu'il est dans la clé) qui se trouve dans la table Action.

    J'ai pu ajouter le champ au formulaire mais celui-ci reste vide alors qu'il doit avoir l'intitulé de l'action.

    Comment faire ?

    Je viens de passer une heure à parcourir des dizaines de sites qui renvoient dans des directions différentes sans avoir une explication claire.

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    $compose est ton objet de class compose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $compose->getAction()->getId();
    //ou
    $compose->getActionId();

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut La solution
    Attention je ne veut pas l'id de Action qui fait partie de la table Compose (dans la clé primaire), je veux son intitulé qui se trouve ailleurs.

    Merci je viens de réussir à résoudre ce problème mais il aurait été bon de préciser dans quel fichier faut-il mettre ce bout de code entre le template editSuccess.php et dans le formulaire associé ComposeForm.class.php surtout pour un néophyte comme moi.

    Je ne sais pas si on peut simplement avoir accès aux champs du formulaire dans le template, en tout cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $compose->getAction()->getActionTexte()
    permet de l'afficher dans le titre du formulaire par exemple.

    Dans la classe formulaire la solution a été d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setDefault('action_texte',$this->getObject()->getAction()->getActionTexte());
    en passant par $this et les deux objets Compose puis Action. Je n'ai pas réussi à obtenir directement l'intitulé qui n'est pas vu comme un champ de Compose et provoque une erreur 500. Peu importe si on peut y arriver ainsi, ce qui est même plus clair à la relecture.

    Je pense que c'est mieux de le placer dans ce fichier.


    J'espère que ce complément pourra aider quelqu'un.


    Je clorai ce sujet en fin de journée ; si tu veux y ajouter des précisions d'ici-là.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    C'est exactement comme ceci que je l'utilise dans les templates et dans les form.
    C'est la base de la programmation objet alors j'avoue que je ne t'ai pas spécialement aiguillé.
    Je rajouterai juste de veiller a faire des jointures quand tu récupères tes objets ayant des relations dont tu souhaite accéder pour éviter a l'ORM de faire beaucoup de requêtes par page. (pour les pages plus complexes qu'un simple formulaire bien sur)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut
    Pour moi ce n'est pas la base de la POO puisqu'ici sous Symfony il y a génération à la volée d'attributs supplémentaires issus de tables secondaires de la requête ; dans le cas présent je suis d'accord qu'une jointure serait mieux mais le code que je reprends n'a pas été écrit ainsi. Du coup l'action est cherchée après coup de la manière "magique" propre à Symfony et PHP : je ne vois pas en quoi un accesseur non défini dans la classe, non lié à un attribut existant (action_id) mais permettant d'obtenir l'action liée à un attribut particulier depuis la base est typique de la POO !

    Et puis la définition d'un formulaire et de son affichage sont deux choses différentes, la dernière devant être aussi indépendante des données que possible. C'est pour ça que j'avais un peu de mal à situer où agir, et comment, dans la logique de Symfony.

    Cela dit, je pense qu'avec l'aide que tu m'as apportée je devrais à l'avenir avoir beaucoup plus de facilité à gérer les données issues de jointure ou pas.

    Un grand merci pour ton aide.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 04/02/2015, 14h07
  2. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  3. Multiplication du même champs autant créer une autre table?
    Par berceker united dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/08/2006, 14h15
  4. [Debutant] Appel d'enregistrement issu d'une autre table
    Par grasduslip dans le forum Access
    Réponses: 15
    Dernier message: 21/07/2006, 16h34
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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