Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 16h15   #1
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 22
Points : 9
Points : 9
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 :
$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 :
$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...
miam84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h14   #2
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 96
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 96
Points : 143
Points : 143
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.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h51   #3
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

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

Informations forums :
Inscription : janvier 2007
Messages : 577
Points : 692
Points : 692
Envoyer un message via MSN à kenny.kev
Normalement cette méthode setPositions te permet de faire ça, par contre ne c'est plus comment il faut faire, désolé.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h36   #4
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 22
Points : 9
Points : 9
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
miam84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 20h11   #5
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

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

Informations forums :
Inscription : janvier 2007
Messages : 577
Points : 692
Points : 692
Envoyer un message via MSN à kenny.kev
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"
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 11h27   #6
Membre habitué
 
Avatar de Nico_F
 
Homme Nicolas
Développeur Web
Inscription : avril 2011
Messages : 96
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 24
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 96
Points : 143
Points : 143
Citation:
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 :
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.
Nico_F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 08h20   #7
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 22
Points : 9
Points : 9
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 :
$this->mergeForm(new PersonnePhysiqueForm($this->getObject()->getPersonnePhysique())););
plutôt que celle-là :
Code :
$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 :
$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
miam84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 14h16   #8
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 22
Points : 9
Points : 9
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
miam84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h11.


 
 
 
 
Partenaires

Hébergement Web