|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() |
Bonsoir,
Pour les besoins d' une action précise j' ai besoin de vérifier la valeur passé dans un submit. L' idée est la suivante : J' ai un formulaire avec 2 boutons "Enregistrer" et "Valider" , les deux déclenche la même action. Seulement en fonction du bouton je passe un paramètre spécifique dans mon objet. je pensais donc récupérer la valeur du submit pour faire ça. Il y a sûrement mieux mais je vois pas comment. |
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : octobre 2004 Messages : 235 ![]() |
Qu'est ce qui te gène dans le fait d'utiliser la valeur du submit ?
|
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() |
Ben rien, il y a sûrement mieux pour faire ça non ?
sinon comment tu ferais pour récupérer la valeur dans l'action déclenché par le post ? |
|
00
|
|
|
#4 | ||
|
Membre éclairé
![]() Inscription : octobre 2004 Messages : 235 ![]() |
Essaye ce code dans un fichier php :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() |
Bien sur dans un contexte symfony.. .sinon ça serait trop simple...
Donc avec un objet form qui doit être binder puis valider.. |
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Inscription : octobre 2004 Messages : 235 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() |
Oui j'ai entendu ça aussi...
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il n'y a pas de problème particulier pour traiter cela avec symfony. Juste une question complémentaire, quel doit être exactement l'action du bouton valider ? Vérifier les saisies ? Dans ce cas, il y a un plugin : sfJqueryFormValidationPlugin qui te permet de vérifier les conditions en java, directement dans ton formulaire, ce qui n'empêche pas de refaire la vérification avant d'enregistrer les données, ce qui permet de sécuriser les cas où l'utilisateur n'a pas activé le javascript ou celui du pirate qui enverrait son propre paquet POST.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() |
L’événement 'valider' doit modifier un champs particulier en plus de sauvegarder les champs saisies par l'utilisateur.
|
|
00
|
|
|
#10 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Cela va être un poil lourd à gérer dans la sauvegarde du form.
L'idéal serait d'utiliser une case à cocher sur le form, ou une liste déroulante, suivant le type de données que tu veux utiliser. Le problème vient du fait que, si tu utilises un sfDoctrineForm, la sauvegarde est inclue dans le form. Et que seul les champs ayant un widget et un validateur peuvent être sauvegardé. Mais on doit pouvoir tricher... ![]() Dans un premier temps, tu vas créé ton form avec tous les champs que tu souhaites utiliser y compris celui qui doit contenir la données issue du bouton. Celle là tu la met en hidden. Et tu lui met un validateur de base, dans tous les cas on se fiche de la valeur récupérée. Dans la méthode d'initialisation du form, il n'y a rien de particulier à faire. Pour l'affichage du form non plus, à toi de voir. Pour le retour, il faut commencer par le lier à l'enregistrement de la base (ou un new si c'est un ajour). Puis a vérifier la validité du form, et, le cas échéant, à retourner le form pour modification. S'il est bon, tu récupères le nom du bouton utilisé pour le retour et, en fonction, tu appels une méthode, qui tu auras créé sur le form pour lui donner la nouvelle valeur de la données. La méthode du form va modifier le tableau values de l'objet form et y mettre la bonne valeur. Ensuite, il ne reste qu'à sauvegarder l'enregistrement.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#11 | |
|
Membre régulier
![]() |
Citation:
Je dois utiliser un widget aussi pour les boutons ? |
|
|
00
|
|
|
#12 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il n'y a pas de Widget pour les boutons. Il faut les indiquer dans le template. De la même manière, le form ne sais pas traiter le retour d'un bouton, il faut donc le traiter dans l'action (execute) du retour du form, qui va utiliser une méthode du form, créée par nous, pour mettre la donnée à jour.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() |
Oui cela m'intéresse car cela doit faire une semaine que je m' arrache les cheveux pour récupérer la valeur d'un submit et mettre à jour mon champs via un setCustomerId() en fonction du submit cliqué.
On m' a conseillé de le faire cela en Ajax.. je ne sais pas si cela va être plus simple. |
|
00
|
|
|
#14 | ||||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
J'ai pas trop le temps de faire tous le code pour toi... il va te falloir mouiller ta chemise.
A priori, tu bloques essentiellement sur "comment récupérer le bouton utilisé". Définir les boutons dans le template : Code :
Code :
Après, à toi de traiter. Pour voir ce qu'il nous retourne, tu peux, dans le tout début de l'action entre la commande : Code :
print_r($request->getParameterHolder()->getAll());die(); Attention, il faut bien créer une méthode sur le form, qui va aller modifier les données récupérées et validées. Dans ton objet form, elles sont dans un tableau value. On aura une méthode qui va ressembler à Code :
Voila de bonnes pistes. Je ne vois pas trop comment ni quel serait l'intérêt de traiter en js. Sauf à ignorer les fonctionnalités du framework.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||||
|
00
|
|
|
#15 |
|
Membre régulier
![]() |
Oui bien sur c'est pas à toi de faire le boulot, je voudrais juste comprendre un peu les mystères de symfony concernant les formulaires.
Donc dans le cas qui nous intéresse, comment je peux utiliser la fonction dont tu parles (function setMaData()) , dans le configure.php ? et je l'appelle depuis mon action.php ? |
|
00
|
|
|
#16 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu ne peux pas créer une méthode dans une autre méthode... ceci n'est pas possible en PHP.
Non, cette méthode doit être dans ton objet form, donc au même niveau que la méthode configure(). Et effectivement, tu l'appel depuis le contrôleur.Là où je te l'ai expliqué dans mon précédant poste. Essaye déjà de faire un bout de code, et, si tu as des problèmes, tu n'hésites pas à revenir ![]()
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#17 | ||
|
Membre régulier
![]() |
Oui bien sur je voulais dire dans la classe evaluationForm j' ai créé la fonction setmadata.
Je l'appelle dans le contrôleur comme ceci Code :
|
||
|
00
|
|
|
#18 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Et tu as mis quoi comme code dans setMaData() ?
Et dans configure() du form ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#19 | ||
|
Membre régulier
![]() |
Ceci :
Code :
|
||
|
00
|
|
|
#20 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Désolé, ce que je t'ai raconté ne marchera pas.
Je me suis basé sur mon intuition du fonctionnement du framework, mais elle a été mise en pièce. En fait, la première chose que fait la méthode save() est de vérifier que l'objet est valide avec un isValid(). Et cette méthode commence par vider le contenu du tableau value[]... perdu Bon, j'ai réfléchi et trouvé une autre méthode qui, à postériori, me semble plus propre. L'idée est de modifier le tableau que tu récupères du sfRequest. Et de remplacer la valeur véhiculée dans le champ caché par celle que tu veux lui mettre. Plus de modification de l'objet form (sauf dans la méthode configure). Le contrôleur devrait alors ressembler à : Code :
Ceci est une idée de la quel s'inspirer pour faire ton code.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
Copyright © 2000-2012 - www.developpez.com