18
2009
Validateur de dates
Certains d’entre vous ont voulu à plusieurs reprises faire un formulaire avec différents champs de Dates. L’une devant être inférieure à l’autre comme une date d’emménagement et de déménagement.
Bien évidement, le framework Zend a pensé à tout ceci avec le composant Zend_Date mais n’a pas pensé aux formulaires. Il n’y a pas de validateur connu (pour le moment) servant à ceci.
C’est pourquoi, dans le but d’en avoir un sous la main et aussi car j’en avais surtout besoin, je créai un validateur de dates. Il me permet de différencier deux champs contenant une date (de préférence des datepickers jQuery ou Dojo) et dire si oui ou non la date 1 est plus ancienne que la date 2.
Voici d’ailleurs le code du validateur:
| PHP | | copy code | | ? |
| 01 | /** |
| 02 | * App_Validate_Date |
| 03 | * |
| 04 | * Classe servant à faire la différene entre 2 dates |
| 05 | * |
| 06 | * Retournera True si valide |
| 07 | * False si faux |
| 08 | * |
| 09 | */ |
| 10 | class App_Validate_Date extends Zend_Validate_Abstract |
| 11 | { |
| 12 | const FALSEDATE = "falseDate"; |
| 13 | const ILLEGALDIFF = "illegalDiff"; |
| 14 | |
| 15 | protected $_messageTemplates = array( |
| 16 | self::FALSEDATE => |
| 17 | "False Date: L'une des dates est invalide", |
| 18 | self::ILLEGALDIFF => |
| 19 | "ILLEGAL DIFF: La date d'emmenagement est plus récente que la date de déménagement" |
| 20 | ); |
| 21 | |
| 22 | /** |
| 23 | * la date de départ |
| 24 | * |
| 25 | * @var unknown_type |
| 26 | */ |
| 27 | protected $_date; |
| 28 | |
| 29 | /** |
| 30 | * sert à instancier le validateur |
| 31 | * |
| 32 | * @param unknown_type $date |
| 33 | */ |
| 34 | public function __construct($date) |
| 35 | { |
| 36 | $this->setdate($date); |
| 37 | } |
| 38 | |
| 39 | /** |
| 40 | * @return unknown_type |
| 41 | */ |
| 42 | public function getdate() |
| 43 | { |
| 44 | return $this->_date; |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * Setteur = initialiser la variable avec celle passée en paramètre |
| 49 | * @param unknown_type $_date |
| 50 | */ |
| 51 | public function setdate($_date) |
| 52 | { |
| 53 | $this->_date = $_date; |
| 54 | } |
| 55 | |
| 56 | public function isValid($value) |
| 57 | { |
| 58 | $this->_setValue($value); //à laisser obligatoirement |
| 59 | |
| 60 | |
| 61 | if(Zend_Date::isDate($value, 'dd/mm/yy', 'fr_FR') && Zend_Date::isDate($this->_date, 'dd/mm/yy', 'fr_FR')) |
| 62 | { |
| 63 | $datevalue = new Zend_Date($value, 'fr_FR'); //on instancie une date de la valeur |
| 64 | $datedate = new Zend_Date($this->_date, 'fr_FR'); //on instancie la date |
| 65 | |
| 66 | $testdate = $datedate->sub($datevalue); |
| 67 | |
| 68 | if($testdate < 0) |
| 69 | { |
| 70 | return true; |
| 71 | } |
| 72 | else |
| 73 | { |
| 74 | $this->_error(self::ILLEGALDIFF); |
| 75 | return false; |
| 76 | } |
| 77 | } |
| 78 | else |
| 79 | { |
| 80 | $this->_error(self::FALSEDATE); |
| 81 | return false; |
| 82 | } |
| 83 | |
| 84 | } |
| 85 | |
| 86 | } |
Pour l’utiliser, je n’ai pu le faire que du côté contrôleur. Il faut bien récupérer les deux valeurs après avoir posté le forum. Et voici donc les étapes à effectuer pour que cela marche.
| PHP | | copy code | | ? |
| 01 | if($this->_request->isPost()) |
| 02 | { |
| 03 | $formdata = $this->_request->getPost(); |
| 04 | |
| 05 | $validator = new Zend_Validate(); //créer un validateur vide |
| 06 | $validator->addValidator(new Zend_Validate_Date('dd/mm/yy', 'fr_FR')); //ajout du validateur de verif date en 1° |
| 07 | $validator->addValidator(new App_Validate_Date($this->_request->getPost('date_debut'))); //ajoute le validateur de diff date en second |
| 08 | |
| 09 | $form->date_fin->addValidator($validator); //ajoute la chaine de validateur afin de tous les verifier |
| 10 | |
| 11 | if($form->isValid($formdata)) // ce isvalid appelle le isvalide du formulaire pour exécuter à la chaine tous les validateurs |
| 12 | { |
| 13 | //suite du traitement du formulaire |
| 14 | } |
| 15 | } |
J’espère que ce validateur vous aidera dans vos projets. Si vous comptez l’améliorer, prévenez moi en m’envoyant les améliorations apportées.
Articles Connexes
Laisser un commentaire
Catégories
- Actualités (11)
- Android (5)
- Bases de Données (4)
- Développement (1)
- PasteQR (2)
- PHP (8)
- Systèmes et Réseau (5)
- Technologies Web (5)
- Tests (2)
- Zend Framework (30)
Commentaires récents
- (@Fritte7) (@Fritte7) dans PasteQR passe en 1.1.0
- roux dans ZendX Jquery Dialog
- Fritte7 dans Gérer des évènements dans une listview.
- Fierfeu dans Introduction à Zend Framework 2.0
- Christophe B. dans Gérer des évènements dans une listview.
Mots-Clefs
Active Directory AJAX Android Apache2 APC Bootstrap Chrome Configuration CSS Eclipse Firefox Google html HTTP Installation Internet Internet Exporer Java Javascript JQuery JQuery UI Linux Mémoire Mac MySQL Navigateur Opera PDO Pear Phing PHP Safari SGBD SMTP SQL Ubuntu View Helper Windows Server XML Zend Cache Zend DB Zend Form Zend Framework ZendX ZF 2.0
WP Cumulus Flash tag cloud by Roy Tanck requires Flash Player 9 or better.

Publié par Throrïn




