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 06/01/2011, 00h54   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 77
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 77
Points : 12
Points : 12
Par défaut probleme de recuperation de parametre

Bonjour à tous!!

j'ai un sérieux problème de récupération de paramètre!
Voilà le truc:
Sur mon projet, j'ai un formulaire pour inscrire les utilisateurs. J'utilise le plugin sfdoctrineguardplugin pour la gestion de ceux-ci.

j'ai crée un module (doctrine generate module..sfguarduser).Le formulaire d'inscription en fait est celui utilisé par "executeEdit" (les utilisateurs sont déjà stocké dans la base donc un appel du formulaire fait référence à la modification de ses données d’où le "executeEdit").

Après validation du formulaire, j'aimerais envoyer un email de confirmation au client grâce au champ "email" préalablement rempli lors de l'inscription. Ceci après l'ajout des données dans la base.

Mais seulement dans le processForm je n'arrive pas à récupérer l'email pour router mon mail.J'ai essayer le fameux
Code php :
$email = $request->getParameter('email');
mais rien il ne récupère pas!!

Comment faire? j'aimerais bien envoyer l'émail après l’exécution de la méthode bind.

Merci d'avance!!
lepopol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 11h37   #2
Membre confirmé
 
Avatar de Vivian Pennel
 
Vivian Pennel
Developpeur Symfony | JSF/Seam
Inscription : août 2004
Messages : 173
Détails du profil
Informations personnelles :
Nom : Vivian Pennel
Âge : 23
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Developpeur Symfony | JSF/Seam
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2004
Messages : 173
Points : 246
Points : 246
Le mail est passé en post via un format de nom particulier (ici ca doit être sf_guard_user[email_address], pour la conversion en PHP fais un simple var_dump($_POST) dans ton action.

Tu as deux façons pour le récupérer à ce niveau, soit tu utilises la méthode de parcours de tableaux via une chaîne, intégrée dans symfony :
Code :
1
2
 
$request->getPostParameter('sf_guard_user[email_address]');
soit tu le récupère avec ton formulaire plus simplement,

Code :
1
2
 
$form->getValue('email_address');
__________________
Mon blog : http://blog.developpez.com/vivian-pennel/
Vivian Pennel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 15h04   #3
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
en prime il a été validé, ce qui peut éviter pas mal de problèmes.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 17h23   #4
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
J 'ai le même type de problème.

J' appel un action si le formulaire n' est pas validée. Dans cette action j' essai de récupérer les valeurs postées pour affiché un message perso contenant différents variable.

Voici l' appel de la fonction.

Code :
1
2
3
4
5
6
 
// Cas ou le formulaire n' est pas validée
 
else {
 
            $this->nogood($form);
et l' action

Code :
1
2
3
4
5
 
 public function nogood()
 
  {
    $score1 = $form->getValue('score1');

J' obtiens

Notice: Undefined variable: form in ...

Fatal error: Call to a member function getValue() on a non-object
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 21h42   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Dans le fonctionnement du form, le tableau value, qui va te retourner les données, n'est rempli que si le formulaire est valide.

Je ne vois pas l'intérêt de t'embêter a refaire ce que fait déjà très bien symfony. Cherche sur la personnalisation des messages d'erreur et tu n'auras plus de problèmes.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 21h56   #6
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui effectivement mais j' ai besoin de personnalisé un peu les message.

Par exemple au lieu de required dans le champs n' est pas rempli le client aimerai plutot 'Veuillez evaluer X sur le THEME Y'.

Une idée pour passer des variables dans le tableau de message ?
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 22h20   #7
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu as toutes les informations dans ce document.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 23h31   #8
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui tu dois sans doute parler ce tableau la.

Code :
1
2
 
array('required' => 'This value is required.')
Mais c' est un peu plus compliqué, j' ai des valeurs que je récupère grâce à l'url quand j' appel le formulaire. De la je passe en hidden 3 valeurs qui seront enregistrés dans la base.

Dans ces 3 valeurs j' ai l' id de la personne concerné par le formulaire, je voulais donc réafficher le nom de la personne sur les champs qui n' ont pas été rempli.

Dans le formulaire j' ai 6 champs de type bouton radio obligatoire:

Si un des champs n' est pas saisie j' aurai aimé

Ex :

"merci d' evaluer michel martin sur le theme 'communication".
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 05h37   #9
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Après, il y a ce que l'on peut faire, et pas.

Le traitement des objets fait qu'ils sont initialiser dans setup et configure avant que la moindre donnée n'arrive. Il doit être possible de modifier le texte du message avant de binder les données. Et donc d'y rajouter le nom de la personne. A la condition que l'on soit sur de la valeur du nom, donc qu'il ne soit pas saisi dans le même écran, si non, on court le risque que la valeur, non validée, non nettoyée constitue un trou de sécurité. Si, comme je l'ai compris, la valeur est saisie dans le même écran, l'intégrée dans tous les cas dans les message d'erreur est dangereux.

Et sérieusement, l'utilisateur sait sur quel fiche il se trouve, c'est ré-afficher à l'écran, avoir à côté d'un système de case à cocher le message, "Vous devez choisir l'une des possibilités" ou le tiens ne devrait pas changer beaucoup à la facilité de compréhension de l'erreur et à la solution à lui donner.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 09h29   #10
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui j' ai finalement réussi à utiliser normalement les validateurs et donc rappeler le formulaire et afficher les message directement (sans variable).

Par contre j' ai 2 problèmes qui subsistent :

1 - On peut toujours faire des allers/retours sans et valider X fois le formulaire sans que le navigateur ne m' avertissent.

2- J' ai du retirer les variables de mon template que je récupérer au chargement du formulaire au premier chargement me permettant d' afficher un titre perso et d' autre information lié à la personne qui va soumettre le formulaire et à celle qui est concerné par les informations qui y seront saisies.

Pourquoi ?

Ces variables sont calculées à partir d' un paramètre (token) qui est passé dans l' url. Ainsi chaque url est destiné (invitation par e-mail) à une personne et 1 seul.

Le problème ?

Si le formulaire n' est pas validé directement, je perds cette url (retour vers l' action du post) et les variables de mon template sont alors vide.

Conséquences ?

Error 500 car j' appel une méthode ($customer->getFirstname()) sur une variable qui n' est pas un objet.










Ces variables sont ca
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h06   #11
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
1. Je ne comprend pas le problème des allez et retour, c'est le principe de fonctionnement des formulaires sous symfony, et sous web en général. Tu as un plugin qui prend en compte une bonne partie de tes validateurs, directement en JS. Ce qui peut éviter les allez retour inutiles. Regarde dans le sous forum des plugins, le sujet sur la liste des plugin.


2. Pourquoi mettre une tel valeur dans l'url, qui est fragile (l'utilisateur peut facilement la modifier ?). Accessoirement, symfony permet de faire du GET dans un retour POST, en effet, tu peux dans ton formulaire générer créer une url de retour avec des données qui seront alors parsé par le système de route au retour.

Mais le plus simple ici serait d'utiliser les fonctionnalités de rémanence de l'objet user, vu que tu as une session mise en place automatiquement par symfony, profite en pour y stocker te données (et même directement le nom). Après, plus de problèmes d'url ni de risque de modification par l'utilisateur.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h25   #12
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Je l' utilise pas les sessions car dans cette partie du projet , cette application est frontend et les utilisateurs n' ont pas a se logger.


J' authentifie les visiteurs avec un token qui est stocké en base et qui est leur envoyé par email au moment de l' invitation.

C 'est le point d" entrée du formulaire ainsi :

SI tu n' as pas de token valide ou expiré => out !
SI tu est déja venu avec ce token et valider le formulaire => redirect template indiquant que tu es déja venu.

1 token => 1 invitation => 1 contributeur => 1 évaluation (formulaire)

Quand j' appel le formulaire je trouvais sympa d' afficher quelques informations comme par exemple 'evaluation de $client par $contributeur ' en titre.

Le hic est que cela ne fonctionne plus si le formulaire n' est pas validé du premier coup (voir premier message).
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 22h06   #13
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
On a un doublon dans les messages, deux messages pour un même sujet.

Tu utilises les sessions, je ne pense pas que tu aies modifié le factory.yml (je crois) où il est possible de les désactivé.

Le token CRSF nécessite des sessions pour fonctionner. Une session est initialisé pour une connexion et est indépendante d'une authentification. Session et authentification sont deux choses différentes (quoique l'authentification dépend de l’existence de sessions)
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 11h02   #14
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui ou plutot un fork de sujet.

Pour le factories.yml j'ai bien mis timeout à false et pourtant je suis deloggé au bout d' une heure ou 2.
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 11h49   #15
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Il y a aussi un paramètre session au niveau de la configuration d'apache. "timeout" si mes souvenirs sont bon.

Il faut le mettre en corrélation.

Une durée de session infinie, est-ce une bonne idée ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 12h00   #16
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Ben j' ai d' autres applications sur le même serveur, pas de timeout sur certaines, d' autres oui (phpmyadmin.. .

Sur symfony que je mettre une valeur ou false c 'est la même chose. J' ai également modifié directement le vhost du site avec des valeurs a 86400.

Toujours déconnecté automatiquement au bout de quelques heures.
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h14   #17
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Vérifie bien dans ton factories.yml notamment le paramètre session_cookie_lifetime qui semble avoir aussi son mot à dire.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 23h12   #18
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Malgré ceci :

Code :
1
2
3
4
5
6
 
 user:
    class: sfGuardSecurityUser
    param:
      timeout:   false # Session lifetime in seconds
      session_cookie_lifetime: 86400
Toujours une déconnexion au bout de moins de 2 h
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 09h41   #19
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Et dans apache, quel est la durée maximal de la session ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 14h27   #20
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
il n' y pas de durée , j' ai d' autre application sur le même serveur utilisant les session (handler) pour lesquel je n' ai aucun timeout.
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h12.


 
 
 
 
Partenaires

Hébergement Web