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

 PHP Discussion :

[Jobeet] Problème avec un formulaire [1.x]


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut [Jobeet] Problème avec un formulaire
    Bonsoir.

    Désolé, j'ai pas pu faire mieux pour le titre étant donné que je débute dans Symfony et que je ne sais pas trop comment nommer les choses.

    Voici mon ContactForm.class.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public function configure()
      {
    //    unset($this['_csrf_token']);
     
        $this->setWidgets(array(
          'name'    => new sfWidgetFormInputText(),
          'email'   => new sfWidgetFormInputText(),
          'message' => new sfWidgetFormTextarea(),
        ));
     
        // Ici un truc qu'on va utiliser lors de la redirection de l'internaute après soumission
        $this->widgetSchema->setNameFormat('contact[%s]');
    $this->widgetSchema->setNameFormat('contact[%s]'); est la ligne qui nous intéresse.

    Voici mon action.class.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function executeSubmit($request)
      {
        $request->checkCSRFProtection();
        $this->forward404Unless($request->isMethod('post'));
     
        // Voir ContactForm.class.php, au sujet de "getParameter('contact')" qu'on a construit grâce à "setNameFormat('contact[%s]')" :
        $this->redirect('contact/thankyou?'.http_build_query($request->getParameter('contact')));
      }
    Et voici ma page thanksSuccess.php "Merci d'avoir envoyé blabla" (qui affiche donc un récapitulé de ce que l'internaute à envoyé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <p>Votre message a bien été envoyé !</p>
     
    <!--<ul>
      <li>Name:    <?php echo *** ?></li>
      <li>Email:   <?php echo *** ?></li>
      <li>Message: <?php echo *** ?></li>
    </ul>-->
    Comme vous pouvez le voir, je ne sais pas quoi mettre pour afficher le nom, l'email et le message récupéré du formulaire

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il manque le code le plus intéressant pour résoudre l'énigme, celui de la méthode executeThanks qui prépare les données pour ton template.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Non, malheureusement ça n'est pas la plus intéressante.
    La méthode est vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function executeThanks()
    {
    }
    Elle n'est présente que pour permettre d'afficher le template.
    Tout est sensé fonctionner comme ça, j'ai suivit à la lettre le tuto suivant : http://www.symfony-project.org/forms...-Form-Creation

    Simplement, ils sont marrant, mais après refactorisation des méthodes configure() et executeSubmit(), ils nous laissent en plan en oubliant d'expliquer comment changer le code dans thanksSucess.php. -_-

    D'où ma grande détresse, étant donné que Symfony a son propre langage qu'il est impossible de deviner.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <!--<ul>
      <li>Name:    <?php echo *** ?></li>
      <li>Email:   <?php echo *** ?></li>
      <li>Message: <?php echo *** ?></li>
    </ul>-->
    Qu'y a-t-il derrière les ** ?

    A mon avis le problème vient de là. Relis bien l'exemple.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Justement, il n'y a rien derrière les ***.

    Au départ, le tuto fournit les codes complets pour :
    - ContactForm.class.php
    - action.class.php
    - thanksSuccess.php

    Ensuite j'ai expliqué qu'ils proposent de refactoriser :
    - ContactForm.class.php => configure()
    - action.class.php => executeSubmit()

    ... mais ne donnent pas le nouveau code pour thanksSuccess.php ! Or, dans l'état où il est, il ne peut plus fonctionner (les instructions ne sont plus valides).

    En fait la 1ère version des fichiers propose de construire un array "$params" constitué de 3 paramètres 'name', 'email' et 'message' que l'on associe aux widgets (enfin ce qui est passé via le formulaire hein). Ensuite on passe le tableau via le http_build_query($params) et puis on récupère celà avec un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li>Name:    <?php echo $sf_params->get(name) ?></li>
    Mais la refactorisation propose de se passer de la construction d'un tableau pour directement utiliser un "truc" (on ne nous explique pas ce que c'est) nommé "contact", sensé contenir les paramètres, et construit via cette ligne totalement mystique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema->setNameFormat('contact[%s]');
    A partir de là on utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http_build_query($request->getParameter('contact'))
    ... et après c'est le drame puisqu'on ne sait pas comment utiliser celà
    ____________________

    Bref, je cherche juste quelqu'un pour me dire comment appeler ce qui est passé via le http_build_query($request->getParameter('contact')).

    J'ai essayé 15000 trucs pendant 3h.

    Le seul truc qui ne me met pas un message d'erreur, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li>Name:    <?php echo $sf_request->getParameter(blablabla*) ?></li>
    Mais je n'obtiens qu'une liste à puce à moitié vide, où il n'y a rien après "Name: " et "Email: " et "Message: "...

    (*) je peux mettre ce que je veux là-dedans, que ce soit 'contact[name]' ou 'name' ou 'carotte', Symfony n'en a rien à faire et ne m'affiche aucun message pour me dire "carotte n'existe pas"...

    Ça laisse un peu à désirer tout ça. Alors, vous me direz :
    "oui bon mais tu n'as qu'à te passer de la refactorisation et garder la 1ère version du code"
    . Seulement, mon objectif est de comprendre plutôt que d'abandonner, car tôt ou tard le problème se reposera.

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Je n'ai pas essayé ce tuto et mes souvenirs de mon bref passage sur Symfony sont un peu vagues faute d'y avoir touché récemment, mais voici mes suggestions sur le sujet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->widgetSchema->setNameFormat('contact[%s]');
    permet, si ma mémoire est bonne, de renommer les champs du formulaire tels qu'ils vont apparaitre dans la requête POST subséquente à sa validation. Les champs du POST seront donc nommés contact['name'], contact['email'], etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http_build_query($request->getParameter('contact'))
    reconstruit une requête dans l'URL en fonction du tableau. On devrait donc avoir dans le GET qui s'ensuit, donc dans le $request qui va être traité par l'action, une série de champs (paramètres) nommés 'name', 'email', etc.

    Pour vérifier ce qu'il en est exactement, ma suggestion serait de faire des dumps dans tes actions.

    Dans executeSubmit(), pour vérifier comment est appelée la page suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfContext::getInstance()->getLogger()->debug('contact/thankyou?'.http_build_query($request->getParameter('contact')));
    et/ou dans executeThanks() pour se rassurer et vérifier que les paramètres ont bien le nom voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfContext::getInstance()->getLogger()->debug(print_r($request->getParameters(), true));
    Une fois vérifiés les paramètres, je conseillerai de préparer leur lecture dans l'action plutôt que de lire directement $request dans le template.

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

Discussions similaires

  1. problème avec un formulaire
    Par mary12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 16
    Dernier message: 07/06/2006, 11h39
  2. Problème avec un formulaire
    Par GilesB dans le forum Langage
    Réponses: 9
    Dernier message: 06/06/2006, 21h19
  3. Problème avec un formulaire
    Par Mysti¢ dans le forum Langage
    Réponses: 3
    Dernier message: 02/04/2006, 00h19
  4. [Système] Problème avec les formulaires
    Par Ludo75 dans le forum Langage
    Réponses: 9
    Dernier message: 02/02/2006, 11h13
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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