CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 14-06-2016 21:04:19

pierrot10
Forêt noire
Date d'inscription: 20-11-2013
Messages: 115

Comment établir des regle de validation sous CakePHP 3 (Formulaire)

Bonjour à tous,

Je me lance avec CakePHP3 et je constate de gros changement.

Par exemple, pour valider un formulaire, avec CakePHP 2.x, je le fais ainsi dans un model

Code: php

  1. public $validate = array(
  2.     'username' => array(
  3.       array(
  4.         'rule'    =>'/^[a-z0-9\-]+$/',
  5.         'allowEmpty'=> false,
  6.         'message' => "Le nom d'utilisateur n'est pas valide. Il ne doit pas contenir d'escapes."
  7.         ),
  8.       array(
  9.         'rule'    => 'isUnique',
  10.         'message' => "Ce nom d'utilisateur existe déjà"
  11.         ),
  12.       array(
  13.         'rule'    => 'notEmpty',
  14.         'allowEmpty'=> false,
  15.         'message' => "Le nom d'utilisateur est obligatoire")
  16.       ),
  17.     'password'  => array(
  18.       array(
  19.         'rule'    =>'notEmpty',
  20.         'allowEmpty'=> false,
  21.         'message' => "Le mot de passe est obligatoire"
  22.       ),
  23.       array(
  24.         'rule'    => array('between', 6, 10),
  25.         'message' =>'Le mot de passe doit avoir entre 6 et 10 caractères, un chiffre et une majuscule'
  26.       ),
  27.       array(
  28.         'rule'    => '/^(?=.*\d)(?=.*[a-x])(?=.*[A-Z]).*$/', // Controle si au moin 1 chiffre et 1 mujuscule
  29.         'message' =>'Le mot de passe doit avoir entre 6 et 10 caractères, un chiffre et une majuscule'
  30.       )
  31.     ),
  32.     'temppassword'  => array(
  33.         'rule'    =>'notEmpty',
  34.         'allowEmpty'=> false,
  35.         'message' => "Le mot de passe temporaire est obligatoire"
  36.     ),
  37.     'email' => array(
  38.       array(
  39.         'rule'    => array('email',true),
  40.         'message' => "Le format de votre e-mail n'est pas valide"
  41.         ),
  42.       array(
  43.         'rule'    => 'isUnique',
  44.         'message' => "Cet e-mail existe déjà"//,
  45.         //'on'    => 'create'
  46.         )
  47.       ),
  48.     'firstname' => array(
  49.         'rule'    =>'notEmpty',
  50.         'allowEmpty'=> false,
  51.         'message' => "Le prénom est obligatoire"
  52.     ),
  53.     'lastname' => array(
  54.         'rule'    =>'notEmpty',
  55.         'allowEmpty'=> false,
  56.         'message' => "Le nom est obligatoire"
  57.     ),
  58.     'group_id' => array(
  59.       'rule'    =>'notEmpty',
  60.       'allowEmpty'=> false,
  61.       'message' => "Un groupe doit être choisi"
  62.       ),
  63.     /*
  64.     'cp'    => array(
  65.       'rule'    => '/^[0-9]+$/',
  66.       'allowEmpty'=> true,
  67.       'message' => "Le code postal doit être numérique"
  68.       ),
  69.     */
  70.     'pobox'   => array(
  71.       'rule'    => '/^[0-9]+$/',
  72.       'allowEmpty'=> true,
  73.       'message' => "La case postale doit être numérique"
  74.       )
  75.   );

Sous CakePHP 3 , ca semble etre bien défferent.

Si j'édite le fichier qui se trouve dans /src/Model/Table/Site.Table.php
je vois ceci

Code: php

  1.    public function validationDefault(Validator $validator)
  2.     {
  3.         $validator
  4.             ->integer('id')
  5.             ->allowEmpty('id', 'create');
  6.  
  7.         $validator
  8.             ->allowEmpty('name');
  9.  
  10.         $validator
  11.             ->allowEmpty('content');
  12.  
  13.         $validator
  14.             ->allowEmpty('altitude');
  15.  
  16.         $validator
  17.             ->allowEmpty('latitude');
  18.  
  19.         $validator
  20.             ->allowEmpty('longitude');
  21.  
  22.         $validator
  23.             ->allowEmpty('valley');
  24.  
  25.         $validator
  26.             ->allowEmpty('city');
  27.  
  28.         $validator
  29.             ->allowEmpty('cp');
  30.  
  31.         $validator
  32.             ->allowEmpty('state');
  33.  
  34.         $validator
  35.             ->allowEmpty('country');
  36.  
  37.         return $validator;
  38.     }

Comment puis avant une équivalence?

Par exemple, j'aimerais que le champs ID et name, soit unique
J'aimerais que mon altitude, latitude, soit des décimal et pouvoir definir le nombre après la virugle.

Pourriez-vous me pister et me dire ou faire ceci exactement?

Je vous remecie

Hors ligne

 

#2 15-06-2016 08:55:48

cake17
Cooker
Date d'inscription: 29-03-2012
Messages: 381
Site web

Re: Comment établir des regle de validation sous CakePHP 3 (Formulaire)

Bonjour Pierrot10,

Je peux te conseiller de lire la doc http://book.cakephp.org/3.0/fr/orm/vali … tion-rules

En gros tu as deux niveaux de validation:
- dans validateDefault(), les règles de format de type, etc ... par exemple pour qu'un champ soit au  max de 10 caractères.
- dans buildRules() : les règles d'application par exemple pour vérifier qu'un champ est unique, etc ...

Pour les validations de décimale, utilise la rule decimal dans validateDefault() : http://api.cakephp.org/3.2/class-Cake.V … ation.html

->add('email', 'valid', [
    'rule' => ['decimal', 2],
    'message' => __("Doit être un nombre décimal avec exactement 2 chiffres après la virgule."),
])

Pour le nombre après la virgule, à la place de 2, tu peux mettre une regex

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr