IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Récupération d'une valeur à partir d'un formulaire [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut Récupération d'une valeur à partir d'un formulaire
    Bonjour,

    Je suis débutant sur Symfony, alors j'ai une question qui me bloque depuis deux jours.

    J'ai un formulaire d'inscription qui contient: email + mot de passe, généré à partir de mon entité profile qui hérite du FOSuserBundle. Voici le code html du formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    <form action = "{{ path('zeroprofil_formulaire1') }}" method="post" class = "well form-inline">
    <fieldset>
    <h1 style = "font-size: 12px; text-align: center; font-family: Tahoma, Geneva, sans-serif"> Nouveau sur OlympMe? Inscrivez vous! </h1>
     
    <label for="zero_userbundle_profiletype_email" class="required"></label>
    <input type="email" placeholder="Adresse email" id="zero_userbundle_profiletype_email" name="zero_userbundle_profiletype[email]" required="required">
    <br></br>
    <label for="zero_userbundle_profiletype_password" class="required"></label>
    <input type="password" placeholder="Mot de Passe" id="zero_userbundle_profiletype_password" name="zero_userbundle_profiletype[password]" required="required">
    <div class="controls"> <br/>
    <button type="submit" class="btn btn-info">
    <i class="icon-user icon-white"></i> s'inscrire </button>
    </div>
    </fieldset>
    </form>
    Une fois l'internaute saisie ce formulaire sur la page d'accueil, j'enregistre à la BD à partir de mon contrôleur. Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    	public function accueilAction()
        {
        	$profile = new profile();
     
     
     
    		$form = $this->createForm(new ProfileType, $profile);
     
    		$request = $this->get('request');
     
    		if( $request->getMethod() == 'POST' )
            {
     
                 $form->bind($request);
    			 $em = $this->getDoctrine()->getEntityManager();
    			 $profile->setUsername($profile->getEmail());
                 $em->persist($profile);
                 $em->flush();
    			 echo $request->get('zero_userbundle_profiletype[email]');
                 return $this->redirect( $this->generateUrl('zeroprofil_formulaire1'));
     
    		}
     
    		return $this->render('ZeroProfilBundle:Profile:accueil.html.twig',array('form' => $form->createView(),));
     
        }
    Ensuite, je redirige l'internaute vers la page formulaire 1, pour qu'il continue son processus d'inscription. A ce niveau j'ai besoin de récupérer l'adresse mail qui a été introduite, pour mettre à jour uniquement la ligne dudit internaute, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    	public function formulaire1Action()
        {
     
     
    		$request = $this->get('request');
     
     
    		echo $request->get('zero_userbundle_profiletype[email]');
     
            return $this->render('ZeroProfilBundle:Profile:formulaire1.html.twig');
        }
    Toutefois, la variable $request n'affiche rien, donc je ne sais pas comment je vais récupérer mon utilisateur afin qu'il continue son processus d'inscription.

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Par défaut Passe le en argument

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Merci beaucoup.. Mais je ne vois pas trop comment je vais utiliser ça.. Pourriez vous m'expliquer plus?

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Je veux juste ajouter, que mm en exécutant cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $request->request->get('zero_userbundle_profiletype[email]');
    au niveau de la page qui contient le formulaire d'inscription, rien ne s'affiche!!

    Je ne comprends pas, est ce que la facon avec laquelle je veux afficher le mail est fausse?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Je vous remercie vraiment, vous faites comme mon prof avant

    Ok, je vais lire la doc, mais le lien que vous m'avez envoyé ne marche pas

    Et est ce que vous pourriez juste m'approcher le problème, car je ne sais pas par où commencer?

    Merci encore

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Bonjour,

    Bon j'ai lu tout ce document, la quasi totalité du contenu je la connais.. Mais j'ai pas pu passer mon obstacle. Donc, svp, si vous avez une solution outre le doc ça sera gentil, car je suis contraint par le temps

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Bonjour,

    Votre prof n'a donc pas dû assez insister sur les bienfaits de lire la doc avec attention car la réponse s'y trouve bel et bien.
    Je me permets de vous rapprocher de l'infime partie que vous ne connaissez pas :
    http://symfony.com/fr/doc/2.1/book/f...es-et-doctrine

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Je crois que vous croyez que je me croise les bras en attendant des réponses. ça fait 3 jours que je cherche partout, et je bloque, voici mon code maintenant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public function accueilAction()
        {
        	$profile = new profile();
     
    		$form = $this->createForm(new ProfileType, $profile);
     
    		$request = $this->get('request');
     
    		if( $request->getMethod() == 'POST' )
            {
     
                 $form->bindRequest($request);
    			 $em = $this->getDoctrine()->getEntityManager();
    			 $profile->setUsername($profile->getEmail());
                 $em->persist($profile);
                 $em->flush();
    			 $info = $form->getData();
    			 echo $info->getEmail();
                 return $this->redirect( $this->generateUrl('zeroprofil_formulaire1'));
     
    		}
     
    		return $this->render('ZeroProfilBundle:Profile:accueil.html.twig',array('form' => $form->createView(),));
     
        }
    Je ne vois pas pourquoi la page formulaire1, ne m'affiche pas l'email de celui qui a fait l'inscription au niveau de la page d'accueil. Dites moi, ce code est juste ou il est faux.

    Je tiens à vous informer que je récupère les données pour les enregistrer dans ma base de données. Sauf que là, j'ai besoin de récupérer email de ce nouvel inscrit pour la suite du processus. Donc je veux récupérer ce paramètre pour l'utiliser dans une autre méthode du contrôleur.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Je vais être franc et direct : quand je lis "Bon j'ai lu tout ce document, la quasi totalité du contenu je la connais.." et que je vois que vous ne maîtrisez pas un simple getData(), je me dis en effet que vous n'approfondissez pas beaucoup et que vous surestimez votre maîtrise de symfony.

    Dans l'état actuel de votre code, il est tout à fait logique que vous ne récupériez pas l'email de l'utilisateur nouvellement inscrit dans une autre méthode? Mais avant d'en arriver là, il me parait important que vous compreniez ce que vous faites.

    Première chose, une fois la commande $form->bind($request); passée, que contient votre variable $profile ?

    Deuxième chose, que veut dire en français $profile->setUsername($prolfile->getEmail()); ?

    Troisième chose, que va renvoyer ($profile->getEmail() == $info->getEmail() ?

    En répondant à ces questions, vous comprendrez bien mieux comment fonctionne le traitement du formulaire et vous pourrez sans doute trouver dans le premier lien qui vous a été donnée comment transmettre l'email de l'utilisateur à la méthode que vous souhaitez. Là aussi, il s'agit d'un basique de symfony et si vous souhaitez progresser dans votre connaissance du framework, vous devez être capable de le trouver seul dans la doc.

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public function accueilAction()
    {
    	$profile = new profile();
     
    	$form = $this->createForm(new ProfileType, $profile);
     
    	$request = $this->get('request');
     
    	if( $request->getMethod() == 'POST' )
            {
     
            	$form->bindRequest($request);
    			 $em = $this->getDoctrine()->getEntityManager();
    			 $profile->setUsername($profile->getEmail());
    		$em->persist($profile);
    		$em->flush();
     
    		return $this->redirect( $this->generateUrl('zeroprofil_formulaire1', array('user' => $form->getData('email'))));
     
    	}
     
    	return $this->render('ZeroProfilBundle:Profile:accueil.html.twig',array('form' => $form->createView(),));
     
    }
     
    public function formulaire1Action($user)
    {
    	echo $user;
            //$info = $form->getData();
    	//echo $info->getEmail();				
            return $this->render('ZeroProfilBundle:Profile:formulaire1.html.twig', array('user' => $user));
    }
    Bon j'ai trouver l'alternative de faire passer les paramètres à travers l'url, chose que je n'aimerai pas faire. Pourriez vous me dire comment éviter de faire ceci? Merci

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Sincèrement, en arriver à se poser la question de savoir comment récupérer des données présentes dans la base, je ne pense pas que ce soit Symfony le problème...

    Puisqu'il vous faut du tout cuit sans comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public function accueilAction()
        {
        	$profile = new profile();
     
    		$form = $this->createForm(new ProfileType, $profile);
     
    		$request = $this->get('request');
     
    		if( $request->isMethod('POST') )
            {
     
                 $form->bind($request);
    			 $em = $this->getDoctrine()->getEntityManager();
    			 $profile->setUsername($profile->getEmail());
                 $em->persist($profile);
                 $em->flush();
     
                 return $this->redirect( $this->generateUrl('zeroprofil_formulaire1', array('user' => $profile)));
     
    		}
     
    		return $this->render('ZeroProfilBundle:Profile:accueil.html.twig',array('form' => $form->createView(),));
     
        }
     
        public function formulaire1Action(Profile $user)
        {
        	// Première façon
            $email = $user->getEmail();
     
            // Deuxième façon
            $email = $user->getUsername();
     
            return $this->render('ZeroProfilBundle:Profile:formulaire1.html.twig', array('user' => $user));
        }

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Par défaut
    Mais j'ai pas pu passer mon obstacle. Donc, svp, si vous avez une solution outre le doc ça sera gentil, car je suis contraint par le temps
    L'obstacle est d'envergure !
    La contrainte que vous évoquez m'amène à vous conseiller l'installation d'un outils 'clé en main' ? Quelle est exactement votre besoin ?

    Au plaisir

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    frfrance31: Merci beaucoup pour votre intérêt. Mais si vous lisez au départ mon code, vous allez voir que je sais très bien récupérer mes données de la base de données par des get. Et je comprends chaque ligne de code dans mon algorithme. Votre: $user->getEmail(), va me renvoyer tous les emails enregistrés dans la BD, alors que moi j'aimerai récupérer celui de l'internaute qui vient de taper son email lors de l'inscription à la page d'accueil. En d'autres termes, si j'ai deux utilisateurs qui se sont inscrit au même moment dans deux endroit différents avec email1 et email2; je dois au niveau de la page formulaire1 faire la différence entre les deux.

    Le problème n'est pas Symfony certes, le problème que j'ai lu la doc, et je viens de commencer la pratique, donc ma réflexion est un peu lourde pour faire le lien entre tout ce que j'ai appris.

    @Matlow: J'espère que vous avez compris mon besoin!

  15. #15
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    @frfrance31
    J'ai essayé de faire passer le user comme paramètre Profile comme vous l'avez proposé, alors j'ai eu cette belle erreur:

    Zero\UserBundle\Entity\Profile object not found
    Malgré que je l'ai déclaré dans le use! Une idée?

  16. #16
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut Une solution
    Pour ceux qui coince pour la même raison que moi, voici une proposition d'un code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
         public function formulaire1Action($user)
        {
     
     		$profile_repository = $this->getDoctrine()->getManager()->getRepository('ZeroUserBundle:Profile');
     
    		$current_user = $profile_repository->findByEmail($user);
     
    		print_r($current_user);
     
    		echo $this->getEmail();
     
    		//$form = $this->createForm(new ProfileType, $current_profile);
     
    		//$request = $this->get('request');
     
     
            return $this->render('ZeroProfilBundle:Profile:formulaire1.html.twig', array('user' => $user));
        }
    Merci

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Citation Envoyé par hazem2410 Voir le message
    frfrance31: Merci beaucoup pour votre intérêt. Mais si vous lisez au départ mon code, vous allez voir que je sais très bien récupérer mes données de la base de données par des get.
    Un getter sert à récupérer un attribut d'un objet, pas à récupérer des données dans une base. Dans votre dernier message, vous récupérez des données dans la base avec le méthode findByEmail() (merci rawsrc de m'avoir fait découvrir cette balise très esthétique). Dans les précédents, cela n'a jamais été le cas.

    Citation Envoyé par hazem2410
    Et je comprends chaque ligne de code dans mon algorithme. Votre: $user->getEmail(), va me renvoyer tous les emails enregistrés dans la BD
    Absolument pas ! L'argument passé en méthode ne contient qu'un seul objet, en l'occurrence le dernier utilisateur à avoir rempli la première partie de votre formulaire.

    Citation Envoyé par hazem2410
    Le problème n'est pas Symfony certes, le problème que j'ai lu la doc, et je viens de commencer la pratique, donc ma réflexion est un peu lourde pour faire le lien entre tout ce que j'ai appris.
    Une partie du problème vient sans doute de là, vous pensez avoir appris des choses alors qu'en réalité, vous ne les avez pas comprises.


    Citation Envoyé par hazem2410
    J'ai essayé de faire passer le user comme paramètre Profile comme vous l'avez proposé, alors j'ai eu cette belle erreur:

    Zero\UserBundle\Entity\Profile object not found

    Malgré que je l'ai déclaré dans le use! Une idée?
    Oui, c'est une erreur de typo de ma part parce que j'ai l'habitude de faire débuter mes entités par une majuscule. Or vous n'avez effectivement pas d'entité "Profile" mais une entité "profile". Il suffit donc d'écrire public function formulaire1Action(profile $user) pour résoudre le problème.


    Concernant votre solution :
    1 - Bannissez les print_r et utilisez Doctrine\Common\Util\Debug::dump à la place
    2 - Avez-vous conscience que $user et $current_user sont totalement identiques ?
    3 - Avez-vous conscience d'aller chercher un objet en base de données en utilisant le même objet que vous avez pris la peine de passer en argument (autrement dit, vous exécutez 2 fois la même requête - ce que doit vous confirmer la barre de debug de Symfony) ?

    Je vais encore être franc : votre code n'est pas propre du tout et montre clairement que vous ne comprenez pas ce que vous faites. Si vous ne faites pas l'effort sur des choses aussi simples de prendre le temps de les comprendre, de les maîtriser et de les faire proprement, vous allez créer un ou des bundle qu'il sera très difficile à maintenir et vous allez foncer tête baissée dans un mur dès que vous allez commencer des choses un tantinet plus compliquées.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération d'une valeur à partir d'un JPanel
    Par Douline1990 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 04/01/2012, 14h57
  2. Réponses: 2
    Dernier message: 01/08/2008, 09h33
  3. [MySQL] Récupération d'une valeur à partir d'une procédure stockée
    Par spaukensen dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 22/03/2008, 12h14
  4. Récupération d'une valeur de formulaire & Javascript
    Par meche dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/12/2006, 19h16
  5. Réponses: 2
    Dernier message: 17/05/2006, 21h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo