|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Bonjour,
Voici un nouveau problème. Dans ma petite application, lorsqu'on visualise une fiche d'un formateur (qui est un DoctrineRecord) on a la possibilité de lui envoyer un email. Pour ce faire je crée un simple formulaire sfForm (je ne crois pas qu'un sfFormDoctrine soit nécessaire ici, puisque l'email n'est pas un DoctrineRecord), auquel j'essaie de transmettre l'instance du formateur, pour disposer de son adresse email et la configurer pour le champ caché 'to'. Le problème, c'est que j'ai direct une erreur 500 qui m'indique que "_csrf_token" n'est pas une propriété de "Formateur". Or je ne vois pas ce que cela vient faire ici... Voici les codes : Code :
Code :
Code :
Citation:
|
|||||||
|
|
00
|
|
|
#2 | ||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
J'ai contourné le problème en faisant ceci dans l'action:
Code :
|
||
|
|
00
|
|
|
#3 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Le csrf token est une sécurité qui est automatiquement implémenté dans les form.
Il génère un token dans le form en champ caché qui est vérifié au retour. Le plus courant pour ton erreur est que tu n'as pas généré les champs caché dans ton template. Il arrive aussi, mais plus rarement, que le validateur ait été supprimé et donc ne puisse pas vérifier un token qui revient. Vérifie dans le code html généré si le champ hiden du token csrf s'y trouve.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Non le token n'était pas généré, pour j'ai bien utilisé la méthode renderHiddenFields()...
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
En fait, je dis peut-être n'importe quoi parce que je n'ai jamais vu le formulaire s'afficher à ce moment. Je tombais sur l'erreur 500 décrite plus haut.
Ceci dit, je vais plutôt passer par des variables de session pour retrouver mon info. Parce que là, si l'internaute visualise le code source html, il pourra voir les adresses email, ce que je ne veux pas. |
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Oui, il pourra. Ce qui n'est peut-être pas l'idéal !
Reste le token... Par contre, si tu as une erreur 500 avant comment as-tu pu avoir le message après ???
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 | ||||||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Quel message ? Le seul message que j'ai eu, c'est l'erreur 500 et la description de la pile...
Ceci dit, je suis quasiment parvenu à faire ce que je voulais en utilisant le user et les attributs. Ca fonctionne bien. Le seul hic qui me reste, c'est que en cas de non remplissage des champs obligatoires, je n'ai pas comme d'habitude l'affichage des messages d'erreurs. Mon formulaire disparait mais n'est évidemment pas validé (la barre de debogage de symfony m'indique bien que ces champs sont requis). Je m'attendais à ce que le formulaire reste affiché en l'état avec les messages d'erreurs adéquats. Aurais-je manqué quelque chose ? Je remets les sources pour y voir plus clair : Code :
Code :
Code :
- la barre de débogage de symfony m'indique que l'email a bien été envoyé (transport php mail() ) - mais la méthode send retourne 0 - et je n'ai jamais reçu l'email.... |
||||||
|
|
00
|
|
|
#8 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Désolé, je traites trop de messages et fait parfois de la salade de réponses
Il y a un plugin qui pourrait t'aider pour ton cas et pour toute ton application par la même occasion : sfJqueryFormValidationPlugin. A défaut de ré afficher ton form, il va déporter la vérification en local. Vérifie ta configuration. Par défaut, en mode dev tu es en Code :
__________________
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 du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Pour les factories, j'avais changé comme ça :
Code :
|
||
|
|
00
|
|
|
#10 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu dois avoir un problème de configuration du serveur SMTP.
Vérifie les paramètres adresse nom et passe et teste les éventuellement dans un autre outil (de messagerie).
__________________
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 du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Oui c'était bien ça, j'ai mis un hôte smtp en paramètre et ça tourne bien.
Par contre, je n'ai toujours pas résolu mon problème d'affichage des erreurs en cas de formulaire incomplet. Même avec le plugin indiqué, installé correctement après plusieurs vérifications (en fait comme je ne vois pas de différence, je ne sais même pas s'il fonctionne). |
|
|
00
|
|
|
#12 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il utilise la méthode validator de jquery, en fonction des validateurs définis dans le form, pour afficher les messages d'erreur directement à la saisie.
La différence est très visible, dés que tu sors d'un champs faux, tu dois voir apparaître le message d'erreur. Vérifie avec firebug si tu as des messages d'erreur en javascript. Vérifie avec firebug que tes javascript soient bien chargés.
__________________
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 du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Non, je n'ai aucun souci apparent :
- pas d'erreur javascript - js bien chargés Dans le log, je vois quand même cette ligne là : 30 Info sfFilterChain Executing filter "sfJqueryFormValidationFilter" |
|
|
00
|
|
|
#14 | ||||||||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 146 ![]() |
Bon ça y est mon problème est résolu. J'ai dû revoir un peu la façon de faire. Je redonne ici le code complet des parties concernées. Je n'utilise pas le plugin sfJqueryFormValidationPlugin.
En gros, le problème du non-affichage des erreurs de saisies venait du fait que je ne redirigeais pas vers le bon template ( la ligne du setTemplate dans l'action a été rajoutée ). Mais lors du réaffichage de ce template, je perdais la référence à mon formateur. J'ai donc laissé tomber l'idée de l'id dans un hidden, et j'ai modifié la route emailCreate en sfDoctrineRoute pour pouvoir balader le formateur directement dans l'action du form. Code :
Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#15 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
__________________
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