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 :

Validation de date [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut Validation de date
    Bonjour à tous,

    Je développe un API avec Symfony 3.3.1 et php 7.0.19-1.

    Lors de la validation d'une entité, je rencontre un problème plutôt étrange de validation de date.

    Lorsque je poste la date au format Json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
    	"dateNaissance": {
    			"year": 2014,
    			"month": 10,
    			"day": 9
    	}
    }
    la validation est correcte, par contre lorsque je poste une date inférieure à 2012 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
    	"dateNaissance": {
    			"year": 2011,
    			"month": 10,
    			"day": 9
    	}
    }
    par exemple, le serveur retourne une erreur 400 avec une erreur de validation "Cette valeur n'est pas valide" alors que la précédente l'était !!!

    Une idées ?

    Vous remerciant par avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    c'est possible que cette valeur est contrôlé par une range , ou un regex !
    il faut voir l'entité ou le model qui est utilisé par cette formulaire.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut Complément
    Merci pour votre réponse.

    Pour la réalisation de l'API, j'utilise FosRestBundle et le sérializer de symfony.

    Concernant le code, ci-dessous le controlleur, le formulaire et l'entité concernée, la validation du champ concerné :
    Le controlleur.
    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
     
    /**
         * @Rest\View(statusCode=Response::HTTP_CREATED, serializerGroups={"user_profile_detail"})
         * @Rest\Post("/utilisateurs/{user_id}/profil")
         */
        public function postProfilAction(Request $request)
        {
     
            $user = $this -> get('doctrine.orm.entity_manager')
                          -> getRepository('APIBundle:User')
                          -> find($request -> get('user_id'));
     
            if (empty($user)) return UserController::notFound();
     
            $profil = new User_Profile();
     
            //Traitement de l'utilisateur
            $form = $this -> createForm(User_ProfileType::class, $profil);
            $form -> submit($request -> request -> all());
     
            $em = $this -> get('doctrine.orm.entity_manager');
     
            if ($form -> isValid()) {
                $user -> setProfile($profil);
                $em -> persist($user);
                $em -> flush();
     
                return $profil;
            } else {
                return $form;
            }
        }
    Le formulaire
    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
     
    $builder -> add('numero')
                     -> add('origin')
                     -> add('sexe')
                     -> add('dateNaissance', DateType::class)
                     -> add('adresse1')
                     -> add('adresse2')
                     -> add('telephone')
                     -> add('portable')
                     -> add('charte')
                     -> add('cgu')
                     -> add('newsletter')
                     -> add('asKit')
                     -> add('isConducteur')
                     -> add('isPassager')
                     -> add('rating')
                     -> add('photoIdentite')
                     -> add('scanIdentite')
                     -> add('scanPermis')
                     -> add('authParentale')
                     -> add('identiteParent')
                     -> add('commune');
    L'entité
    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
     
    ../
    /**
         * @var \DateTime
         *
         * @ORM\Column(name="dateNaissance", type="date", nullable=true, options={"default": NULL})
         */
        private $dateNaissance;
    /..
    /**
         * Set dateNaissance
         *
         * @param \DateTime $dateNaissance
         * @return Profile
         */
        public function setDateNaissance($dateNaissance)
        {
            $this -> dateNaissance = $dateNaissance;
     
            return $this;
        }
    La validation du formulaire au format yaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dateNaissance:
                - Date: ~

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    https://symfony.com/doc/current/refe...ime.html#years

    years¶
    type: array default: five years before to five years after the current year

    List of years available to the year field type. This option is only relevant when the widget option is set to choice.
    Il suffit de changer la valeur de base (5) pour pouvoir rentrer une année qui soit X années supérieure/inférieure à l'année actuelle.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Septembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Septembre 2014
    Messages : 45
    Points : 43
    Points
    43
    Par défaut Résolution
    Effectivement à partir de cette doc et avec ce complément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ->add('date', 'date', array(
        'years' => range(date('Y') - 100, date('Y') - 20)
       )
    m'a permis de résoudre mon problème.
    Merci à tous.

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

Discussions similaires

  1. problème de validation de date
    Par anayathefirst dans le forum Struts 1
    Réponses: 6
    Dernier message: 05/02/2007, 02h09
  2. Validation de dates ?
    Par AsmCode dans le forum C++
    Réponses: 3
    Dernier message: 26/01/2007, 15h24
  3. Réponses: 4
    Dernier message: 02/06/2006, 15h41
  4. [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