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 :

[Form] Validation de date


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut [Form] Validation de date
    Bonjour,

    J'ai un formulaire avec des dates à saisir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $builder->add('dateDebut', 'date', array(
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        'required' => true,
        'property_path' => 'dateDebut',
        'label' => 'Date début',
        'error_bubbling' => true
    ));
    J'ai placé un Assert sur mon entité pour controler ce champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
     * @ORM\Column(name="DATE_DEBUT",type="datetime")
     * @Assert\NotBlank(message = "La date de début doit être saisie.")
     * @Assert\Date(message = "La date de début n'est pas valide.")
     */
    protected $dateDebut;

    Si je saisi une date valide ou si je laisse le champs vide, je nai pas de problème.

    L'assert NotBlank() fonctionne.

    L'assert Date() ne fonctionne pas.

    Si je saisi une date comme '99/99/9999' j'obtien une erreur php :
    DateTime::__construct(): Failed to parse time string (@ UTC) at position 0 (@): Unexpected character
    Je ne passe pas dans le DateValidator. Quelqu'un a une idée ?

    (Je suis sur Symfony 2.0)

    Merci

  2. #2
    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
    Hello,

    Cette erreur se déclenche également sur des dates valides, mais dépassant le seuil du "bug de l'an 2038" (dont je t'épargnerai l'explication).

    En mettant une date du type 32/01/2012, celle-ci est automatiquement transformée en date valide => 01/02/2012 (de même avec les mois). Donc un 99/99/2012 passe car il se transforme en 07/06/2020 mais la date 99/99/9999 déclenche une erreur, non pas à cause de son format, mais parce qu'elle dépasse la limite.

    La seule solution que j'ai trouvé (pour le moment) à cette situation est de mettre un Callback supplémentaire vérifiant que la date saisie ne dépasse pas le 19/01/2038.

    ++

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Bonjour,

    En effet, javais également remarque que le 32/01 etait automatiquement converti en 01/02.
    C'est plutôt étrange comme choix et ce n'est pas le comportement que je voudrais.

    De plus, sur mon entity, j'ai beau avoir mis un callback ou créer mon propre validateur de date, l'erreur s'affiche avant de passer les validations.

    Tu l'as mis ou ton callback ?

  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
    Effectivement, au temps pour moi le callback n'est pas une bonne solution car l'assignation de la date déclenchera l'erreur avant la validation.

    Je n'ai pas eu à le faire pour le moment mais je sais que j'y aurai le droit très prochainement. Je m'étais dit que le callback permettrait de contourner le problème mais je n'avais pas tilté que l'erreur avait lieu avant.

    Dans ce cas je pense qu'une autre solution serait que la vérification se fasse directement à la sortie du POST avant de binder le formulaire.
    Depuis ton contrôleur, en récupérant la date dans ton objet Request, tu dois pouvoir faire une vérification manuelle sur ton ou tes champs date.

    Je ne sais pas du coup quelle est la manière de faire la plus propre puisqu'on ne peut pas générer l'entité. Je tenterais peut-être une redirection vers la page précédente avec un message flash. Affichage de l'erreur + possibilité de garder le contenu du formulaire. Solution à tester.

    Ça règle aussi par la même occasion le comportement de changement de date (32/01 = 01/02) que tu pourras également vérifier et invalider le cas échéant.

    Je suis d'accord avec toi sur le fait que ce comportement n'est pas des plus naturels.

Discussions similaires

  1. Ouvrir un Form sur la date d'aujourd'hui
    Par Technicien dans le forum Access
    Réponses: 3
    Dernier message: 04/07/2006, 19h17
  2. Réponses: 4
    Dernier message: 02/06/2006, 15h41
  3. FORM validation en texte
    Par FoxLeRenard dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 21/04/2006, 15h42
  4. [Javascript] Form. valider par js, comment prevoir si js pas activé
    Par budiste dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 16h42
  5. [STRUTS][VALIDATOR] Validation de dates
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 16
    Dernier message: 09/09/2005, 11h43

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