Bonjour,
j'aimerais avoir des précisions pour les validateurs de symfony.
J'ai une table d’évènement dans ma DB qui contient des champs ['date_debut'], ['date_fin'], ['heure_debut'], ['heure_fin'].
J'aimerai créer un validateur qui permet de tester la saisie de ces champs : 'date_début' doit être <= à la 'date_fin'.
Et si la 'date_début' == 'date_fin', alors 'heure_début' doit-être < 'heure_fin'...
Pour la première condition, c'est OK j'ai trouvé la solution avec
mais je n'arrive pas à gérer la deuxième condition...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare(...
J'ai essayé cette technique www.developpez.net/.../validator-test-formulaire/ mais sans succès. Pouvez-vous me dire si je suis sur la bonne voie ou s'il vaudrait mieux créer une class pour un validateur personnalisé sachant que je débute avec symfony... ?
Merci pour vos messages.
Voici le code qui pose problème actuellement :
et la fonction checkDateTime()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 //On vérifie que la date de début est antérieure ou égale à la date de fin $this->validatorSchema->setPostValidator( new sfValidatorSchemaCompare('date_debut', sfValidatorSchemaCompare::LESS_THAN_EQUAL, 'date_fin', array('throw_global_error' => true), array('invalid' => 'La date et heure de début doit être antérieure ou égale à la date et heure de fin') //array('invalid' => 'La date de début ("%left_field%") doit être antérieure ou égale à la date de fin ("%right_field%")') ) ); //On vérifie les heures de début et fin $this->validatorSchema->setPostValidator( new sfValidatorAnd(array(new sfValidatorCallback(array('callback' => array($this, 'checkDateTime'))))) );
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public function checkDateTime($validator, $values) { if( ($values['date_debut'] == $values['date_fin']) && ($values['heure_debut'] >= $values['heure_fin']) ) $error["date_debut"] = new sfValidatorError($validator, $message); }
Partager