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 de formulaire avant soumission


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut Validation de formulaire avant soumission
    Bonjour,

    je souhaite qu'un formulaire puisse afficher les erreurs liées à chaque champ avant que la soumission du formulaire ait eu lieu.

    De coutume, l'utilisateur clique sur le lien amenant sur la page d'édition, modifie ou pas les données, valide le formulaire et si des erreurs ont lieu (des contraintes appliquées aux champs de l'entité n'ont pas été respectées), l'utilisateur se retrouve à nouveau sur le formulaire d'édition et les erreurs sont affichées à côté des champs à l'aide de Twig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_errors(form.fieldName) }}
    Je souhaite que la validation des champs ait lieu au chargement de la page (et pas seulement après soumission du formulaireà, et que les erreurs puissent être affichées à côté de leur champ respectif, avant même que le formulaire soit validé. Je souhaite gérer ceci en PHP, à l'aide du form et de l'entity.

    J'ai tenté de m'inspirer de cette entrée du cookbook, en écrivant ceci dans le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $form = $this->container->get('form.factory')->create(new MyEntityType, $myEntity);
    $form->submit($request->request->get($form->getName()));
    if ($form->isValid()) {
    	...
    }
    Mais les champs du formulaire ne sont pas remplis avec les données de l'entité : tous les champs sont vides.
    J'ai essayé de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request->request->get($form->getName())
    par , mais cela déclenche une exception,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myEntity cannot be used as an array in Symfony/Component/Form/Extension/Csrf/EventListener/CsrfValidationListener.php
    Quelqu'un sait-il comment nourrir le formulaire avec les données d'une entité et déclencher la validation, sans que la soumission du formulaire soit nécessaire ?

    Merci par avance pour vos réponses.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 78
    Par défaut
    Salut

    Est ce que tu es sur que c'est possible de le faire avec symfony ?

    J'ai déja fait ce type de validation dans un de mes projet, j'ai utilisé jquery.
    En gros toutes les 500 millisecondes je check les inputs et si les valeurs qu'ils contiennent ne sont pas correctes j'affiche un message et je colore le contour en rouge.

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut
    Je ne sais pas s'il est possible de le faire avec Symfony, effectivement. C'est bien pour ça que je rencontre des difficultés. Mais je me dis que c'est forcément possible : ça a lieu, lorsque quelqu'un valide le formulaire. Il suffit je pense de trouver le code qui est déclenché par le framework, et, au pire, reproduire dans le controller les appels aux bonnes fonctions.
    Mais je me casse les dents dessus jusque là, c'est pour ça que je me demande si quelqu'un s'est déjà posé la question.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 78
    Par défaut
    Oui mais ces actions sont exécutés dans le contrôleur et sont déclenchés au click d'un bouton, alors que toi tu voudrais que cette validation se fasse sans rechargement de page donc sans JS ca me semble impossible.

    Tu pourrait tester ma méthode si tu veux je peux te passer un bout de code pour que tu vois.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 68
    Par défaut
    Hello,

    Comme dit Pifon, sans JS pas de validation coté client. Symfone est un framework serveur.
    Mais tu n'es pas obligé de te casser la tête à tous faire de 0. Il y a des bundles qui existent. J'ai pris le premier au hasard : https://github.com/formapro/JsFormValidatorBundle

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut
    Alors ce n'est pas de la validation côté client que je souhaite réaliser. J'ai dû mal m'expliquer.

    Je retente en reformulant.

    J'ai une classe de formulaire, associée à une entité, pour la création. J'ai une autre classe de formulaire, elle aussi associée à la même entité, pour l'édition.
    Je souhaite afficher une page où les données déjà existantes, en base de données, de l'entité puissent être confrontées aux contraintes de validation et que je puisse afficher le formulaire d'édition (avec certains champs déjà remplis, l'entité étant déjà existante) avec également les erreurs de validation. Le tout au chargement direct d'une page, en GET.

    Car, après qu'un utilisateur clique sur un bouton pour valider un formulaire, on arrive sur un controller qui déclenche la validation. Mais cela n'est pas en lien avec le fait d'avoir cliqué sur un bouton, ou ailleurs, il s'agit juste de méthodes qui s'appelle les unes les autres dans le controller qui déclenche la validation. Symfony 2 semble déclencher cette suite d'appels lorsqu'il s'aperçoit que le bouton submit est pressé. Moi j'aimerai pouvoir déclencher cette suite d'appel "manuellement" donc.

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut
    Suis-je vraiment une des seules personnes à être confrontée à cette situation ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 78
    Par défaut
    donc, le visiteur arrive sur une page et il tombe sur un formulaire pre rempli avec des infos contenus en base ?

    Dans ce cas tu affiche tes infos et tu fais des test en twig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {% if .....%}
    {% else %}
    {% endif %}

  9. #9
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut
    Oui, le visiteur arrive sur une page et il tombe sur un formulaire pré-rempli avec des infos contenus en base. Un formulaire d'édition ordinaire.

    Dans ton idée, le test me permet de tester quoi ? Je ne te suis pas.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 78
    Par défaut
    Je sais pas trop mais d'apres ce que je comprend tu fais ta validation dans ces if.

    Genre si la valeur est composée de n à n caractères j'affiche un message etc ...

    Comme ca les valeurs affichés sont en meme temps sousmisent à une validation sans submit ni rien

  11. #11
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Par défaut
    Hum, non non, pas du tout même, bon sang j'ai dû mal m'exprimer depuis le début. Je reprends, avec un exemple.

    On part d'un formulaire d'édition classique, comme on en trouve dans la documentation et tous les tutoriaux sur internet.

    On a au début le 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
    public function editAction(Request $request)
    {
        $myEntity = // récupérer l'entity en base de données
        //...
        $form = $this->createForm(new MyEntityType(), $myEntity);
     
        $form->handleRequest($request);
        if ($form->isValid()) {
            // perform some action, such as saving the task to the database
     
            //...
        }
     
        return $this->render('MyBundle:MyEntity:edit.html.twig', array('form' => $form->createView()));
    }
    Et on a à l'arrivée le template affichant le formulaire d'édition (sans if, sans else if, juste une formulaire d'édition classique).

    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
    {{ form_start(form) }}
        {{ form_errors(form) }}
     
        <div>
            {{ form_label(form.champ1) }}
            {{ form_errors(form.champ1) }}
            {{ form_widget(form.champ1) }}
        </div>
     
        <div>
            {{ form_label(form.champ2) }}
            {{ form_errors(form.champ2) }}
            {{ form_widget(form.champ2) }}
        </div>
     
        <input type="submit" value="Valider les modifications" />
     
    {{ form_end(form) }}
    Lorsque l'utilisateur clique sur un lien pour accéder au formulaire d'édition, le controller est éxécuté, la page se charge, les champs sont pré-remplis avec les données déjà existantes de l'entité, l'utilisateur soumet le formulaire, la validation a alors lieu dans le controller et si la validation comporte des erreurs, on retombe sur le formulaire d'édition, avec les erreurs affichées à côté de leur champs respectif (pas de if, pas de else if) : c'est le processus classique d'édition d'un formulaire avec Symfony.

    Ce que je souhaite : je veux que la validation ait lieu lors du chargement initial de la page. Je ne veux pas que la page charge, que l'utilisateur soumette le formulaire, que la validation ait lieu et que si il y a des erreurs on retombe sur le formulaire d'édition, je veux que dès le chargement initial de la page, la validation ait lieu, et que s'il y a des erreurs, elles soient affichés à côté de leur champ respectif.

    C'est ça que je ne trouve pas comment faire : que le validation ait lieu au chargement initial de la page.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/08/2013, 23h24
  2. [Prototype] Valider un formulaire avant de lancer connexion
    Par amarcil dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 17/07/2008, 20h21
  3. Réponses: 2
    Dernier message: 26/07/2007, 10h41
  4. [Formulaire]valider un enregistrement avant access
    Par robocop2776 dans le forum IHM
    Réponses: 9
    Dernier message: 24/04/2007, 07h15
  5. formulaire et concaténation type="text" avant soumission
    Par jakouz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/04/2006, 10h39

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