|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Bonjour,
Mon problème est le suivant : je génère un formulaire personnalisé dans lequel j'embarque n sous-formulaires correspondant à une classe. Après avoir submit mon formulaire, les données contenues dans mon post se présentent de la manière suivante : Code :
J'aimerais pouvoir bind (et save par la même occasion) chacun des sous formulaires avec les tableaux contenus dans mon post. Pour cela : j'ai tenté de faire ça de la manière suivante : Code :
J'en conclus donc que les éléments de mon embeddedForms ne sont pas des form et ça me contrarie beaucoup mais soit. J'avais alors pensé bind le parent ($this->embeddedForms) mais je ne sais pas comment du fait que mon post ne renvoie pas un tableau avec des sous tableaux mais directement tous mes sous tableaux. Qu'avez-vous à me suggérer ? Merci. |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tout refaire ?
![]() Bon, on va jeter un oeil Je ne suis pas bien sur d'avoir compris la partie du départ, mais tu veux faire des embed sur trois niveau, un form qui contiens des forms qui contiennent des forms ? Si non, ta construction de form est loin d'être académique et de faire du form un objet indépendant. bind est une méthode de sfForm. Pour le reste, il va falloir plus d'information
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
NONNNNNNNNNNN !!!!!
![]() Ok je reformule ! D'abord il y a deux classes DOTATION, et PARTNER. Et entre : il y a une table DOTATIONPARTNER. Le schema (simplifié) donne ça : Code :
Je souhaite donc créer un grand formulaire dans lequel il y a n formulaires qui correspondent à cette classe : DotationParner. Pour ça j'ai donc créé un formulaire vierge : un simple sfForm(), dans lequel pour chaque partenaire je lui envoie le DotationPartnerForm associé. Le reste c'est le principe classique du formulaire, je submit, je renvoie sur la même action et si mon formulaire n'est pas valide je garde les valeurs qui ont été submit et j'affiche les messages d'erreur sur tous mes sous-formulaires. Là ou ça coince c'est lorsque je veux bind les résultats postés avec mon form. La j'ai essayé plusieurs techniques toutes moins académiques les unes que les autres (par exemple embarquer un formulaire qui était bound ->impossible) et la dernière en date consistait à imbriquer mon formulaire global (qui imbriquait déja les sous-formulaires) dans un autre form global, pour avoir un seul objet dans mon POST (et non n résultats comme je les ai décris dans mon premier post), lequel je pourrai alors bind sur ce nouveau form global. ![]() Mais avant d'exploiter cette piste, j'aimerais dans un premier temps savoir quelle serait la manière la plus simple et la plus esthétique de procéder dans mon cas ... si tant est que je me sois expliqué clairement. |
||
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Si j'ai bien compris, tu essayes de binder un form qui embarque (embed) des form qui embarquent des form... soit trois niveau.
Des essais que j'ai vu passer ici, ceci ne peut pas fonctionner, les embed se limitent à un niveau de profondeur. Du moins je n'ai vu personne y arriver. Je n'ai personnellement jamais essayé. Après, je ne vois pas trop comment traiter la chose élégamment (au niveau du code). Est-il envisageable de mettre tout une ribambelle de form (au sens HTML) en place ? Ce qui limiterai la modification a un enregistrement (pas glop). Autre solution, un jeu de form (avec embed de Partner) plus un form pour la Dotation de base. Par contre, il faudra le jouer fin pour la récupération (bind) mais on n'aurais plus le problème de la profondeur. Perso, je partirais par là.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Hmmmm, je ne vois que deux niveaux : le formulaire global, et les sous-formulaires de la classe DotationPartner qui se trouvent à l'intérieur. D'ailleurs lors du POST, le résultat est sur un seul niveau -> une ligne par sous-formulaire.
La première solution n'est pas envisageable : on doit pouvoir faire la configuration de tous les éléments des DotationPartner associés à une dotation en une seule fois (sous-entendu : lors de la soumission du formulaire, on doit pouvoir tout sauvegarder en une fois). La deuxième ne semble pas correspondre à ce que je veux : le but étant non pas de configurer les partners mais bien les éléments de la table intermédiaire, donc je dois forcément afficher des forms de DotationPartner. De plus, tous les champs - qu'il s'agisse de la dotation ou du partner - sont déjà remplis, et même les relations sont faites. Il n'y a donc que trois champs à remplir et il ne me semble pas adapté d'embarquer les formulaires : ni de partner, ni de dotation. Compte tenu de ce que j'arrive à récupérer dans mon post je me sens si près du but ... j'ai l'impression qu'il ne manque que 3 ou 4 lignes de code pour y parvenir. Et j'aimerais juste éviter la solution qui consiste à surcharger la méthode bind pour autoriser les embed qui me semble un peu barbare. |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
De ce que j'ai compris, je cherche à faire la même chose que toi mais je n'ai pas trouvé la solution. Si tu la trouves, pourrais-tu partager ?
|
|
|
00
|
|
|
#7 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
J'avais compris que tu voulais modifier les Partner depuis le Dotation qui leur est lié.
Si tu ne veux travaillé que sur les tables Dotation et DotationPartener il ne devrait (presque) pas y avoir de difficultés. La seul limite du système est que l'enregistrement Dotation doit exister avant de pouvoir lui lier des DotationPartner. Il faut donc procéder en deux étapes pour la création d'un enregistrement sur Dotation : Création de l'enregistrement puis ré affichage (en édition ou pas) et création des enfants. Après il reste le code donné au début du sujet qui me semble un peu confus et que j'ai du mal à localisé. A priori, la construction du formulaire devrait prendre place dans la méthode configure du form de départ : Dotation. Tu as un plugin qui pourrait t'aider la dessus, regarde dans le sujet épinglé de la salle consacrée aux plugins.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Ça y est ça fonctionne ! \o/
Je partage le source complet de mon action : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com