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 :

[sf 1.4.x] validateur de date + d'heure dans des champs séparés (DB) [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Par défaut [sf 1.4.x] validateur de date + d'heure dans des champs séparés (DB)
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare(...
    mais je n'arrive pas à gérer la deuxième condition...

    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 :
    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')))))
            );
    et la fonction 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);
        }

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    je voie pas trop l'interet de séparer la date de l'heure.
    En ayant un champ Debut (DATETIME) et un champ FIN (DATETIME)
    Tu n'as plus qu'à comparer tes 2 champs.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Par défaut
    Citation Envoyé par erictomcat Voir le message
    je voie pas trop l'interet de séparer la date de l'heure.
    En ayant un champ Debut (DATETIME) et un champ FIN (DATETIME)
    Tu n'as plus qu'à comparer tes 2 champs.
    Oui je suis entièrement d'accord cela aurait été beaucoup plus simple, mais la base est déjà existante, je ne peux donc pas la modifier...

  4. #4
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //On vérifie que la date de début est antérieure ou égale à la date de fin
    $this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
      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')
      ),
      new sfValidatorCallback(array(
      	'callback' => array($this, 'checkDateTime')
      ))
    )));
    Je n'ai pas testé ton callback, mais réécrit comme ça, ça me parle un peu plus. Peux-tu être un peu plus précis sur les erreurs que tu rencontres (quels sont les messages d'erreur, ou au contraire s'il n'y a pas d'erreur relevée ?)

  5. #5
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Par défaut
    Hello Nico,
    merci pour ton message.
    Voici l'erreur retournée par ce validateur... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach() in .../lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php on line 169 Call Stack: 0.0000 347636 1. {main}()
    et voilà là où visiblement l'erreur intervient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     new sfValidatorCallback(array(
                                    'callback' => array($this, 'checkDateTime')
                                ))

  6. #6
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Mmmh,

    Tu pourrais dumper $validator et $values histoire de t'assurer qu'il s'agit bien des bons types d'objets et qu'ils contiennent ce qu'ils sont censés contenir ?

    Le message d'erreur laisse penser que tu donnes un form à la place d'un validateur dans ta méthode checkDateTime() par exemple (ou quelque chose dans ce gout là...)

    Vérifie que tu as le bon type d'objet et qu'ils sont correctement remplis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recuperer la date sans l'heur dans un champ datetime
    Par bob33 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/06/2010, 12h59
  2. Date et heure dans un enregistrement
    Par guiguikawa dans le forum Access
    Réponses: 4
    Dernier message: 27/06/2006, 10h26
  3. afficher la date du jour dans un champ date
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/03/2006, 21h32
  4. Réponses: 7
    Dernier message: 16/09/2005, 10h14
  5. date de...a dans un champ string
    Par Yepazix dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/09/2004, 23h54

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