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 :

Ignorer validation dans les formulaires


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 41
    Par défaut Ignorer validation dans les formulaires
    Bonjour à tous,

    J'ai un formulaire et je voudrais permettre à mes utilisateurs d'enregistrer leurs réponses pour venir compléter le formulaire plus tard s'ils n'ont pas fini.
    J'ai donc 2 boutons l'un "Enregistrer réponses" et l'autre "Valider réponses". Et je voudrais que lors de clic sur le 1er bouton (Enregistrer) il n'y ai pas de validation "required" car sinon évidemment on ne laisse pas la possibilité à l'utilisateur de remplir un formulaire incomplet et de l'enregistrer...

    Et malheureusement je n'arrive pas à faire cela, quelqu'un aurait-il une idée de comment je pourrais faire?

    Je pensais à quelque chose comme ca...
    (action.class.php)
    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
    if ($request->isMethod('post') && ($request->getPostParameter('action') == 'Valider'))
      {
        $this->form->bind($request->getParameter('profile'));
     
        if ($this->form->isValid())
        {
            $this->form->save();
            $this->redirect('home/index');
        }
      }
     
      elseif ($request->isMethod('post') && ($request->getPostParameter('action') == 'Enregistrer')){
          $this->form->bind($request->getParameter('profile'));
          $this->form->save();
          $this->redirect('home/index');}
    Mais je pense que je suis sur la mauvaise voie, vu que les validators sont deja créé dans mon ProfileForm.class.php...


    Merci d'avance à toute personne pouvant m'apporter une petite aide!

  2. #2
    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
    Personnellement, je créerais une seconde classe ProfileTmpForm qui hérite de ProfileForm et dans laquelle tu règles tes validateurs comme tu veux, puis j'instancierai l'une ou l'autre classe selon les paramètres de la requête.

    Autre solution, ajouter à ProfileForm une méthode pour modifier ses validateurs et appeler cette méthode avant le bind() en fonction des paramètres de la requête.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 41
    Par défaut
    Merci pour ta réponse Herode,

    Effectivement la création d'une classe ProfileTmpForm me parait être la bonne solution!

    Par contre une fois créée, j'ai supprimé la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->setValidators(array(......))
    Et lorsque j'enregistre mon formulaire (donc en instanciant la classe ProfileTmpForm) j'ai deux erreurs:

    Mon premier champ est donné comme invalid: "$formTmp['provider'] (sfWidgetFormChoice)
    Invalid."
    C'est une liste et bizarrement lorsque je choisi le 2e de la liste je n'ai plus d'erreur...

    Et j'ai un "CSRF attack detected":
    "$formTmp['_csrf_token'] (sfWidgetFormInputHidden)
    CSRF attack detected."


    Je sais pas trop comment corriger ca...

  4. #4
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    justement tu devrais mettre le setValidator() pour qu'il ta validation à toi pas celle par défaut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setValidator(array('required' => false, ...));
    Ton symfony est configurer pour vérifier la validité du formulaire émis, tu as peut être dût supprimer ce champs là.

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 41
    Par défaut
    Ah oui effectivement j'ai pas été très maline là... Merci kenny.kev.

    J'ai résolu le problème de "CSRF attack detected", en insérant dans mon template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $formTmp['_csrf_token']->render()?>
    Ca marche nickel maintenant.

    Merci à vous deux pour votre aide

  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
    Pour le jeton CSRF, si tu ne t'en sers pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$this->disableLocalCSRFProtection();
    à placer dans la méthode configure() du formulaire par exemple, fait aussi l'affaire

Discussions similaires

  1. Réponses: 29
    Dernier message: 01/07/2006, 09h23
  2. Vérifier si mail valide ’@.’ dans un formulaire
    Par Chansonnette dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2006, 14h09
  3. [débutant] Erreur dans les formulaires
    Par mytika dans le forum Access
    Réponses: 7
    Dernier message: 18/05/2006, 15h57
  4. Validation dans les tables
    Par Isabelle27 dans le forum Access
    Réponses: 8
    Dernier message: 02/05/2006, 15h14
  5. [W3C] Nombre de caractère dans les formulaires
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 01h37

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