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

Zend_Form PHP Discussion :

Classe utilitaire pour les formulaires


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut Classe utilitaire pour les formulaires
    Bonjour,

    je viens du monde Java avec notamment Struts et je me demandais si avec le framework de Zend on a un équivalent des FormBean.
    Les FormBean sont des classes qui "mappent" les formulaires html et qui permettent de récupérer les valeurs entrées dans les différents champs, de les valider selon les critères qu'on veut, et de récupérer les messages d'erreur de validation (pour un affichage ou un traitement).
    Existe-t-il un mécanisme similaire avec ce framework ?
    Ce qui m'interesse le plus est de pouvoir récupérer, dans un objet, les valeurs saisies dans un formulaire.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello,

    Le module Zend_Form est en proposition depuis le mois d'août.

    Il s'agit d'une classe facilitant la création, le traitement et la validation de formulaires (X)HTML.

    Pour l'instant, ça en est toujours aux discussions donc ce ne sera sûrement pas pour la 1.1.0, courant novembre.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Merci pour l'info.
    Je vais voir ce que je peux faire avec mes dix doigts.

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    non mais c'est facile à faire
    dans le formulaire mettre les champs sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <input type="text" name="form[usr_ident]" size="8" maxlength="8" />
    dans le contrôleur récupérer le formulaire de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->_request->get('form');
    puis pour éviter les intrusion de code il est conseillé de filtrer les valeur par exemple supprimer les espaces avant et après les valeur et supprimer le code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       protected function _filter($form) {
          $formData = new StdClass();
          Zend_Loader::loadClass('Zend_Filter');
          Zend_Loader::loadClass('Zend_Filter_StripTags');
          Zend_Loader::loadClass('Zend_Filter_StringTrim');
          $filter = new Zend_Filter();
          $filter->addFilter(new Zend_Filter_StripTags());
          $filter->addFilter(new Zend_Filter_StringTrim());
          foreach ($form as $key=>$value) {
             $formData->$key = $filter->filter($value);
          }
          return $formData;
       }
    ensuite passer à la vérification. j'utilise pour ça la classe suivante
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?php
     
    #Zend_Loader::loadClass('Zend_Validate');
     
    /**
     *
     * Validation de formulaires
     * à adapter pour utiliser pleinnement les Zend_Validate 
     *
     * @author Jean Yves Terrien
     *
     */
    class Fast_Validate #extends Zend_Validate
    {
     
       protected $_verifFormat = array(
          'required'         => '.+',
          'phone'            => '^(\+?[ \t]*[0-9]{2}[ \t]*[0-9]{1}|[ \t]*[0-9]{2})[ \t]*[0-9]{2}[ \t]*[0-9]{2}[ \t]*[0-9]{2}[ \t]*[0-9]{2}$',
          'phoneOrNull'      => '^(\+?[ \t]*[0-9]{2}[ \t]*[0-9]{1}|[ \t]*[0-9]{2})[ \t]*[0-9]{2}[ \t]*[0-9]{2}[ \t]*[0-9]{2}[ \t]*[0-9]{2}$|^$',
          'date'             => '^([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})$',
          'dateOrNull'       => '^([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})$|^$',
          'identFT'          => '^[a-zA-Z]{4}[0-9]{4}$',
          'identFTOrNull'    => '^[a-zA-Z]{4}[0-9]{4}$|^$',
          'email'            => '^[0-9a-zA-Z_\-]+(\\.)?[0-9a-zA-Z_\-]*@([0-9a-zA-Z_-]+\\.)+[a-zA-Z]{2,4}$',
          'emailOrNull'      => '^[0-9a-zA-Z_\-]+(\\.)?[0-9a-zA-Z_\-]*@([0-9a-zA-Z_-]+\\.)+[a-zA-Z]{2,4}$|^$',
          'hour'             => '^[0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?$',
          'codePostal'       => '^[0-9]{5}$',
          'codePostalOrNull' => '^[0-9]{5}$|^$'
       );
     
       /**
        * Array of validation failure messages
        *
        * @var array
        */
       protected $_messages = array();
     
       /**
        * Array of validation failure messages
        *
        * @var array
        */
       protected $_errors = null;
     
       public function __construct($formData, $verif = null)
       {
          $this->formData = $formData;
          if (is_array($verif)) {
             $this->_verifForm($verif);
          }
       }
     
       function _addVerifMessage($key, $msg) {
          if (! isset($this->_errors)) $this->_errors = new StdClass();
          if (! isset($this->_errors->$key)) $this->_errors->$key = array();
          $tab = &$this->_errors->$key;
          $tab[] = $msg;
          $this->_messages[] = $msg;
       }
     
       /**
        * Defined by Zend_Validate_Interface
        *
        * Returns array of validation failure messages
        *
        * @return array
        */
       public function getMessages()
       {
           return $this->_messages;
       }
     
       /**
        * Defined by Zend_Validate_Interface
        *
        * Returns array of validation failure messages
        *
        * @return array
        */
       public function getErrors()
       {
           return $this->_errors;
       }
     
       function _verifForm($verif) {
          $this->_errors = null;
          #Debug::show('$this->formData',$this->formData);
     
          foreach ($verif as $key=>$value) {
             foreach ($value as $ereg=>$msg) {
                #Debug::show($key.'=>'.$this->formData->$key, $this->verifFormat[$ereg].'=>'.ereg($this->verifFormat[$ereg], $this->formData->$key));
                if (!ereg($this->_verifFormat[$ereg], $this->formData->$key)) {
                   $this->_addVerifMessage($key, $msg);
                }
             }
          }
          return $this->isValid();
       }
     
       public function isValid()
       {
          return ($this->_errors == null);
       }
     
    }
    que j'appelle ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
          Zend_Loader::loadClass('Fast_Validate');
     
          $verifForm = array(
             'usr_ident'     => array('identFT'     => "L'identifiant FT n'a pas le bon format (Code Aliance)"),
             'usr_pwd'       => array('required'    => "Le mot de passe est obligatoire"),
             'usr_name'      => array('required'    => "Le nom est obligatoire"),
             'usr_firstname' => array('required'    => "Le prénom est obligatoire"),
             'usr_mail'      => array('required'    => "Le mail est obligatoire", 'email' => "Le format du mail est invalide")
          );
          $validate = new Fast_Validate($formData, $verifForm);
    je dispose ensuite des méthodes suivantes pour récupérer les messages et la validité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $validate->isValid(); //true si form valide
    $validate->getMessages(); //retourne la liste des messages d'erreurs
    $validate->getErrors();      //retourne un objet ayant les mêmes membres que le formulaire qui ont pour valeur un tableau de message d'erreur
    A+JYT
    PS : c'est issue d'un dev rodé depuis longtemps et en production dans beaucoup d'applications depuis plusieurs années. je l'ai porté sous ZF mais comme marqué dans le classe à adapter pour utiliser les Zend_Validate qui travail sur un champs et non sur le form en entier mais qui offre beaucoup d'autre vérifications que les expressions régulières

  5. #5
    Invité
    Invité(e)
    Par défaut
    @sekaijin : Ton approche est intéressante, j'ai pas regardé en détail, mais c'est intéressant. Cependant, pourquoi ne pas factoriser tout ça avec Zend_Filter_Input ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    J'ai mis en place un truc qui ressemble, et je vais regarder en détail ce que tu as posté, merci beaucoup.

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

Discussions similaires

  1. crystal report pour les formulaires
    Par guitariste dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/07/2007, 10h28
  2. A propos de TriActif pour les formulaires
    Par Alain6121967 dans le forum IHM
    Réponses: 2
    Dernier message: 07/03/2007, 10h23
  3. Une classe C# pour les matrices
    Par vladvad dans le forum C#
    Réponses: 3
    Dernier message: 02/12/2006, 13h45
  4. [PHP-JS] PHP et JavaScript pour les formulaires
    Par Ylias dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 26/07/2006, 22h47
  5. Norme JavaScript pour les formulaire
    Par rdams dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/09/2005, 14h14

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