|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Mickael Étudiant Inscription : novembre 2008 Messages : 66 ![]() |
Bonjour,
Voila je galère un peu avec les fonctions de traitement de formulaires, tout les save, doSave, processValue, etc, je ne comprend pas très bien leur fonctionnement, leur ordre d'appel, mais bon... Pour le moment je voudrais modifier une valeur d'un formulaire, plus précisement le champs IP d'un formulaire de contact, il est unset à l'affichage, laissé vide avant soumission et ne peut pas être vide en base de données. je fais donc comme ceci : Code :
Et qui peut m'éclairer sur le fonctionnement, le process des form dans symfony. Merci d'avance. |
||
|
00
|
|
|
#2 | ||
|
Futur Membre du Club
![]() Mickael Étudiant Inscription : novembre 2008 Messages : 66 ![]() |
Bon, j'ai trouvé une solution à mon problème, il s'agit du code suivant :
Code :
processValue est donc la meilleure solution pour éditer les valeurs de champs avant enregistrement en base de données semblerait-il. |
||
|
00
|
|
|
#3 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
houlala...
Bon, reprenons au début ! processValue est la méthode qui permet de "cleanUp", nettoyer les valeurs retournées du formulaire. Pour modifier une valeur avant qu'elle ne soit nettoyée il convient de créer une méthode updateXxxxxColumn() ou Xxxxx est le nom de ta donnée. Dans ton cas cela n'a pas beaucoup d'intérêt vu que tu n'as pas de validateur pour l'adresse IP. Alors où faire ton traitement ? Tous dépend si la valeur doit être modifiée lorsque le formulaire est enregistrée ou lorsque la valeur est enregistrée (quelque soit le formulaire qui en demande la modification). Dans le cas d'une modification quelque soit le formulaire il serait plus intéressant de loger ton code dans le save du modèle (table) et pas dans le formulaire. Pour le faire dans le formulaire tu peux le faire à deux endroits, dans save ou dans doSave. Save vérifie que le formulaire n'a pas d'erreur, initialise une transaction et exécute doSave. Donc dans ton cas où cette valeur doit être modifiée à tout prix, je pense que doSave, dans la transaction me semblerait l'endroit approprié. Mais tu dois y mettre le code que tu as utilisé pour processForm avec le tableau values et pas un setIp qui n'est pas connu dans le form mais dans le modèle. Si ce n'est pas trop claire (j'en ai conscience), reviens nous
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#4 | ||
|
Futur Membre du Club
![]() Mickael Étudiant Inscription : novembre 2008 Messages : 66 ![]() |
ok, c'est bon j'ai effectuer la modification que tu me conseillais, j'ai donc surcharger la fonction doSave de mon formulaire comme ceci :
Code :
une idée? |
||
|
00
|
|
|
#5 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
getObject() récupère l'objet du modèle. Celui-ci est alimenté par le doSave() parent qui est fait après. Donc il est vide...
La solution serait de partir de la valeur dans ton form $this->values['email_address']. Par contre je ne vois pas trop la destinée de $username...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() |
Bonjour,
Je suis désolé de répondre sur ce thread mais il se rapproche beaucoup de mon problème et je pense que Michel Rotta doit savoir ce qu'il me manque. J'utilise aussi un formulaire et souhaite faire des modifications sur les valeurs mais je souhaite les faire au moment de l'affichage du formulaire et non pas au moment de l'enregistrement. En gros je voudrais reformater les données reçues de la base de données pour qu'elles s'affichent comme je veux sur mon formulaire. J'ai utilisé la fonction updateXxxxColumn pour le faire au moment de l'enregistrement mais je ne sais pas quelle fonction utiliser pour l'affichage. Une idée? Merci |
|
00
|
Copyright © 2000-2012 - www.developpez.com