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 :

Formulaire: changer l'ordre des champs depuis le formulaire imbriqué dans le formulaire courant [1.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 37
    Points
    37
    Par défaut Formulaire: changer l'ordre des champs depuis le formulaire imbriqué dans le formulaire courant
    Bonjour,
    voici mon problème. J'ai un module Personne contenant les champs : Nom, prénom, noTéléphone (obligatoire),...
    et un module Client contenant les champs : noClient, noTelephone2 (facultatif), Fax, CB,...

    Comme Client est "enfant" de Personne, j'ai inclus le formulaire Personne dans celui de client avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->embedForm('Personne', new PersonnePhysiqueForm($this->getObject()->getPersonnePhysique()));
    Seulement l'affichage n'est pas très pratique pour celui qui le remplit, car le champ noTelephone2 sera placé avant noTelephone alors qu'il faudrait d'abord remplir noTelephone puisqu'il est obligatoire...

    J'ai tenté de déplacer noTelephone avant noTelephone2 à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema->moveField($test['no_telephone'], sfWidgetFormSchema::BEFORE, 'no_telephone2');
    mais cela ne fonctionne pas, car il dit qu'il ne connait pas le champ "no_telephone". Surement parce qu'il n'est pas dans le formulaire courant, mais dans celui imbriqué, pourtant je fais l'insertion avant le moveField...

    Auriez-vous une solution pour déplacer les champs d'un formulaire imbriqué entre des champs du formulaire courant ?

    Merci d'avance...

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Si ce n'est que l'affichage qui te dérange alors je te suggère de gérer l'affichage de ton form toi même au lieu de faire un simple Je sais que c'est une solution qui fait soupirer parce que c'est quand même chiant de se taper toute la template à la main avec les render sur tous les champs.

    Si ça n'avait pas été un formulaire embarqué, useField aurait fait l'affaire je pense.

  3. #3
    Membre éclairé Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Points : 816
    Points
    816
    Par défaut
    Normalement cette méthode setPositions te permet de faire ça, par contre ne c'est plus comment il faut faire, désolé.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Nico_F Voir le message
    Si ce n'est que l'affichage qui te dérange alors je te suggère de gérer l'affichage de ton form toi même au lieu de faire un simple Je sais que c'est une solution qui fait soupirer parce que c'est quand même chiant de se taper toute la template à la main avec les render sur tous les champs.

    Si ça n'avait pas été un formulaire embarqué, useField aurait fait l'affaire je pense.
    Merci, mais petite question
    par gérer l'affichage moi même, tu veux dire que plutôt que d'utiliser la méthode "configure" de form/ClientForm.class.php je le créé moi-même dans client/_form.php ?

    Est-ce que le fait de faire cela ne posera pas de problème dans mes action comme $form->save() ? Ou devrais-je tout gérer d'une autre manière ?

    Merci

    @kenny.kev : setPosition à visiblement la même utilité que le move parce que j'ai la même erreur en retour... merci quand même

  5. #5
    Membre éclairé Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Points : 816
    Points
    816
    Par défaut
    Normalement tu n'as pas d'erreur c'est que le tableau que tu passes n'est pas bon.

    Pour l'affichage c'est dans template ...Success.php que tu affiche les données comme tu veux, voir ce lien : http://www.symfony-project.org/jobee...Doctrine/en/10
    Juste avant la partie "The Form Action"

  6. #6
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Merci, mais petite question
    par gérer l'affichage moi même, tu veux dire que plutôt que d'utiliser la méthode "configure" de form/ClientForm.class.php je le créé moi-même dans client/_form.php ?

    Est-ce que le fait de faire cela ne posera pas de problème dans mes action comme $form->save() ? Ou devrais-je tout gérer d'une autre manière ?
    Par "gérer l'affichage toi même" :
    - Si tu es dans une logique d'admin gen', alors tu peux récupérer les templates dans le cache, et les placer dans les template de ton module pour les surcharger.
    - Si c'est toi qui met en forme ton formulaire, alors tu as plusieurs niveaux de détails. J'ajouterai à la source de kenny celle que je garde en favori pour l'intégration des formulaires http://www.symfony-project.org/forms...-web-Designers qui en plus de te décortiquer la template d'un formulaire, te donne la manière de gérer les labels, les erreurs etc. Mais tu n'est pas obligé d'aller aussi loin si tu n'en as pas besoin : tu personnalises au niveau que tu veux.

    Dans ton cas tu peux te contenter de l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <form action="<?php echo url_for('contact/index') ?>" method="POST">
      <table>
        <?php echo $form['name']->renderRow() ?>
        <?php echo $form['email']->renderRow(array('class' => 'email')) ?>
        <?php echo $form['subject']->renderRow() ?>
        <?php echo $form['message']->renderRow(array(), 'Your message') ?>
        <tr>
          <td colspan="2">
            <input type="submit" />
          </td>
        </tr>
      </table>
    </form>
    La tu peux swap deux éléments pour qu'ils apparaissent dans l'ordre que tu souhaites.

    Dans tous les cas ça ne change strictement rien à la manière dont tu save les données, à ceci près qu'il vaut mieux que tu respectes les conventions de nommage pour les id et les class des éléments de ton form si tu décortiques beaucoup. Sinon rien ne change coté action à priori.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    Bonjour,
    C'est avec joie que je peux venir annoncer ici que cela fonctionne à présent...

    J'ai tenté de mettre en forme moi-même le formulaire dans le _form.php, mais je n'ai pas été satisfait par cette méthode du fait que je n'ai pas réussi à inclure correctement le embedForm de cette manière...

    Mais à force de bidouille et de test, j'ai remarqué que si je change l'inclusion de mon formulaire en mettant cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->mergeForm(new PersonnePhysiqueForm($this->getObject()->getPersonnePhysique())););
    plutôt que celle-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->embedForm('Personne', new PersonnePhysiqueForm($this->getObject()->getPersonnePhysique()));
    Les deux formulaires sont fusionnés et non pas un inclu dans l'autre uniquement (vous me direz que c'est logique vu le nom de la methode, n'empêche que je n'avais pas remarqué avant ).
    Résultat, mon $this reconnait tout les champs des 2 formulaires et je peux donc déplacer à ma guise avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema->moveField('no_telephone', sfWidgetFormSchema::BEFORE, 'no_telephone2');
    J'espère que ce sera utile à d'autres personnes dans le même cas et je vous remercie pour vos coups de mains.
    A bientôt

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    En fait je me permet juste de reprendre ce fil, car visiblement l'utilisation de mergeForm pose des problèmes lors de l'enregistrement.
    Pour les résoudre, j'ai préféré utiliser la technique citée sur cette page :

    Lien

    A une prochaine

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/06/2011, 12h28
  2. Modifier l'ordre des champs dans un formulaire
    Par Jeannot45 dans le forum Word
    Réponses: 3
    Dernier message: 19/06/2008, 13h23
  3. Réponses: 2
    Dernier message: 09/04/2008, 00h05
  4. Ajouter des champs d'une table différente dans un formulaire
    Par Bouom771 dans le forum Modélisation
    Réponses: 5
    Dernier message: 10/01/2008, 20h03
  5. Réponses: 3
    Dernier message: 03/07/2006, 22h00

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