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 :

Problème avec les validators (formulaires)


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Par défaut Problème avec les validators (formulaires)
    Bonjour, j'ai quelques problèmes avec un formulaire. Je voulais tester de faire une section membre, j'ai donc créer mon module en frontend, j'édite tout ça, le rendus marche bien, les labels sont la, les helpers aussi, mais quand je valide il ne m'affiche pas les erreurs, je comprend pas pourquoi. A priori je n'ai pas d'erreurs syntaxiques dans mon code.
    Je dois avoir un problème dans mes validators :

    UserForm.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
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    $this->validatorSchema->setPostValidator(
              new sfValidatorAnd(
                  array(
                      new sfValidatorSchemaCompare(
                            'pass',  sfValidatorSchemaCompare::EQUAL, 'repass',
                          array(),
                          array('invalid' => "The password and password confirmation are different")
                        ),
                        new sfAnotherValidatorSchemaReCaptcha($this, 'captcha')
                  )
              )
          );
     
          $this->setValidators(
            array(
                'login'   => new sfValidatorAnd(
                     array(
                         new sfValidatorString(
                             array(
                                 'required' => true,
                                 'min_length' => 3,
                                 'max_length' => 14
                             ),
                             array(
                                 'min_length' => "The login is too short. 3 characters minimum.",
                                 'max_length' => "The login is too long. 14 characters maximum",
                             )
                         ),
                         new sfValidatorRegex(
                             array('pattern' => '/^[a-zA-Z0-9-]+$/')
                         )
                     ),
                     array(),
                     array(
                         'required' => "The login is required",
                         'invalid' => "The nickname could not contain special characters."
                     )
                 ),
                 'pass'   => new sfValidatorString(
                     array(
                         'required' => true,
                         'min_length' => 6,
                         'max_length' => 30
                     ),
                     array(
                         'min_length' => "The password is too short. 6 characters minimum.",
                         'max_length' => "The password is too long. 30 characters maximum",
                         'required' => "Password is required",
                         'invalid' => "The password must contains between 6 and 30 characters"
                     )
                ),
                 'repass'   => new sfValidatorString(
                     array(
                         'required' => true,
                         'min_length' => 6,
                         'max_length' => 30
                     ),
                     array(
                         'min_length' => "The password is too short. 6 characters minimum.",
                         'max_length' => "The password is too long. 30 characters maximum",
                         'required' => "Password confirmation is required",
                         'invalid' => "The password must contains between 6 and 30 characters"
                     )
                 ),
                'mail'   => new sfValidatorEmail(
                    array('required' => true),
                    array(
                        'required' => "Email is required",
                        'invalid' => "This email isn't correct. Please give a valid one."
                    )
                )
            )
          );
    _form.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <form action="<?php echo url_for('create_account'); ?>" method="post" id="myform">
        <fieldset>
            <legend><?php echo 'Create your account'?></legend>
        <ul class='formRegister'>
     
                <?php if ($form->hasGlobalErrors()): ?>
                <?php foreach ($form->getGlobalErrors() as $name => $error): ?>
                  <li class='error'><?php echo $error ?></li>
                <?php endforeach; ?>
                <?php endif; ?>
     
                <?php foreach ($form as $widget): ?>
     
                <?php if ($widget->hasError()): ?>
                   <li class='error'><?php echo $widget->getError(); ?></li>
                <?php endif; ?>
     
                <?php if (!$widget->isHidden()) { ?>
                 <li>
                     <span>
                         <?php echo $widget->renderLabel(); ?>
                        <?php echo $widget->renderHelp() ?>
                    </span>
                     <?php echo $widget->render() ?>
                 </li>
                 <?php } else { ?>
                     <li><?php echo $widget->render() ?></li>
                 <?php } ?>
                <?php endforeach; ?>
            </ul>
     
        <p><input type="submit" id='submit' value="<?php echo 'Register'?>" /></p>
        </fieldset>
    </form>
    actions.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    protected function processForm(sfWebRequest $request, sfForm $form)
      {
          $form->bind($request->getParameter($form->getName()));
     
          if ($form->isValid())
          {
              $users = $form->save();
     
              // On set les valeurs par défaut
     
              $users->setHostname($_SERVER['REMOTE_ADDR']);
              $users->setCreate(date('Y-m-d H:i:s'));
              $users->setUpdate(date('Y-m-d H:i:s'));
              $users->setConnect(date('Y-m-d H:i:s'));
              $users->setSignature("");
              $users->setPicture("default");
              $users->setValid(0);
              $users->setRoleId(2); // 1 = Membre / 9 = Admin
              $users->setEtat(0); // 0 = Non activé / 1 = Actif / 2 = Banni
              $users->save();
     
              $this->redirect('register/edit?id='.$users->getId());
          }
     
     
      }
    Voila, j'espère que vous verez plus clair que moi :s

    Merci d'avance

  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 C'est la saison des lapsus, un code pour le compte !
    J'ai lu ton code deux fois, mais je ne vois pas de raisons que cela ne fonctionne pas.

    Je suppose que tu as vérifié s'il passe par le isValid() ou pas.

    Par contre, je ne comprend pas trop l'intérêt de tester le isHidden() de chaque champ, tu peux faire tous le champs cachés d'un seul coup.

    De plus, je ne comprend pas non plus le code après le save() dans le contrôleur.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Plusieurs choses.

    As-tu testé le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <?php if ($form->hasGlobalErrors()): ?>
          <?php echo $form->renderGlobalErrors() ?>
        <?php endif; ?>
    Dans ton code, tu boucles sur les globalErrors. Essayes déjà voir ce qu'il t'affiche avec le renderGlobalErrors.


    Sinon, je reprendrais la remarque de Michel Rotta :
    je ne comprend pas non plus le code après le save() dans le contrôleur.
    Ou plutôt : je ne vois pas ce que ce code vient faire ici. Ce n'est pas le boulot du Contrôleur de réaliser les initialisations, mais celui du Modèle (soit ton objet, soit ton formulaire, voire même directement dans le schema). D'autant plus que tes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
              $users->setCreate(date('Y-m-d H:i:s'));
              $users->setUpdate(date('Y-m-d H:i:s'));
              $users->setConnect(date('Y-m-d H:i:s'));
              $users->setSignature("");
              $users->setPicture("default");
    semblent très génériques. Tu peux les fixer directement dans ton schema.yml.

    Une dernière chose : c'est une très mauvaise pratique que de passer par les valeurs globales de PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SERVER['REMOTE_ADDR']
    Symfony t'offre un environnement qui te met à disposition toutes les variables globales. Personnellement, je ne suis jamais aller chercher l'IP, donc je ne pourrais pas te dire spécifiquement comment, mais c'est très certainement dans la doc.

    EDIT

    En fait encore autre chose

    Une autre mauvaise pratique est de mettre des valeurs en dur dans le code : ce que tu fais avec et autres :
    - soit tu passes par des constantes (mieux mais médiocre) ;
    - soit tu passes par une table de configuration.

    Imagines que finalement tu veuilles changer un de ces paramètres. Tu vas devoir casser tout ton code et tu vas te faire des cheveux blancs à vouloir l'adapter !!

    RE-EDIT

    Je viens juste de remarquer que tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              $users = $form->save();
              [...]
              $users->save();
    Il y a un problème là aussi. Mais si tu changes ta façon dont gérer tes valeurs par défaut, peut-être que le problème ne se posera même plus puisque tu n'auras plus besoin du second.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    bonjour a tous,

    je pense qu'il faut utiliser:

    au lieu de

    essayer

Discussions similaires

  1. [XHTML] Problème avec les champs obligatoires d'un formulaire
    Par elodie13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 26/09/2006, 14h45
  2. [VBA-Excel] Petit problème avec les formulaires
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2006, 09h22
  3. [Système] Problème avec les formulaires
    Par Ludo75 dans le forum Langage
    Réponses: 9
    Dernier message: 02/02/2006, 11h13
  4. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  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