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 :

Validation d'un formulaire && TransformationFailedException


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Par défaut Validation d'un formulaire && TransformationFailedException
    Bonjour à tous,

    Je débute sur Symfony2 et me confronte à un problème depuis plusieurs jours que je n'arrive pas à résoudre. Je génère un formulaire composé simplement d'une liste à puce de deux éléments. Il s'agit de voter pour une personne ou une autre, les deux éléments étant deux tuples de la base de données sélectionnés aléatoirement. Toutefois, à la soumission du formulaire, j'ai parfois (et là aussi c'est très aléatoire...) une erreur du type TransformationFailedException.

    N'arrivant pas à isoler les cas provoquant cette erreur, je m'en réfère à vous, en espérant que vous saurez m'aider.

    Voici le code impliqué

    La méthode du controller :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    public function versusAction(Request $request) {
            $session = $request->getSession();
     
            $retour = array();
            $retour["joueurs"] = array();
     
            $em = $this->getDoctrine()->getManager();
            $joueurs = $em->getRepository('LGELmashBundle:Joueur')->findRandomEligibleJoueurs(2);
     
            $categorie = $em->getRepository('LGELmashBundle:Categorie')->findAll();
            shuffle($categorie);
            $retour["categorie"] = $categorie[0];
     
            $form = $this->createFormBuilder()
                ->add('vote', 'choice', array(
                    'choices'           => array(
                        $joueurs[0]->getId() => "" . $joueurs[0]->getPseudo() . " (" .  $joueurs[0]->getId() .")",
                        $joueurs[1]->getId() => "" . $joueurs[1]->getPseudo() . " (" .  $joueurs[1]->getId() .")",
                    ),
                    'expanded'          => true,
                    'multiple'          => false,
                    'required'          => true,
                    'label'             => ' ',
                    'invalid_message'   => "Votre choix ne figure pas parmi les choix possibles."
                ))
                ->add('categorie', 'hidden', array( 'data' => $retour["categorie"]->getId() ) )
                ->add('submit', 'submit', array('label' => 'Voter') )
                ->getForm();
     
            $form->handleRequest($request);
     
            if ($form->isValid()) {
                $choix_1    = $session->get("vote")[0];
                $choix_2    = $session->get("vote")[1];
                $categorie  = $form->get("categorie")->getData();
                $vote       = $form->get("vote")->getData();
                etc...
            }
            // Update elo score in database
            $joueur_1->findClassement($categorie)->setElo($elo_joueur_1);
            $joueur_2->findClassement($categorie)->setElo($elo_joueur_2);
     
            $session->getFlashBag()->add(
                'success',
                'Votre vote a été pris en compte! Il vous reste n jetons de vote.'
            );
    }
    La vue : (même si à priori, ça ne sert pas à grand chose je pense...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {% extends 'base.html.twig' %}
     
    {% block body %}
        <h1>Versus</h1>
     
        {{ form_start(form) }}
        {{ categorie.question }}
        {{ form_widget(form) }}
        {{ form_end(form) }}
     
        <a href="" class="btn btn-primary">Passer</a>
     
    {% endblock %}
    L'erreur que j'obtiens à la soumission du formulaire implique la liste de choix (liste à puce donc). Je comprend très bien son origine, puisqu'elle est spécifiée dans le profiler Symfony.

    Submitted Data

    View Format 3
    Normalized Format null
    Model Format same as normalized forma

    alors que je m'attend au submit suivant :

    Submitted Data

    View Format 0 => true, 1 => false
    Normalized Format <id d'un membre>
    Model Format same as normalized forma

    Je ne comprend simplement pas d'où provient la différence entre ces deux soumissions de formulaire. Je vous remercie par avance pour votre aide :]

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Par défaut
    Bon, je me répond à moi-même mais si ça peut donner idée d'une solution à certains...

    Après avoir tester plusieurs cas, j'ai l'impression que ça plante car lors de la validation du formulaire, Symfony vérifie si la valeur soumise du champs form[vote] est contenu dans la nouvelle liste des choix du formulaire qui sera régénéré lors du nouvel appel de la méthode de mon contrôleur. Est-ce probable/sensé ou suis-je en plein délire car il est tard et qu'il vaudrait mieux que j'aille dormir ?

    J'envisage deux solutions. La première serait de valider moi-même les champs du formulaire soumis, si c'est possible. La seconde consisterait à me détourner d'une norme Symfony qui implique d'appeler la méthode qui a généré le formulaire pour en traiter le résultat, et effectuer les opérations suivant la soumission du formulaire par ailleurs.

    Votre avis ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/04/2006, 09h42
  2. Javascript : Empecher la validation d'un formulaire
    Par otb82 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/01/2006, 09h46
  3. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 15h47
  4. Vérification de validation d'un formulaire
    Par tom06440 dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2005, 14h29
  5. Réponses: 11
    Dernier message: 16/09/2004, 11h39

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