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 :

Récupérer le label dans le message d'erreurs [ZF 1.7]


Sujet :

Zend_Form PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Points : 39
    Points
    39
    Par défaut Récupérer le label dans le message d'erreurs
    bonjour,

    J'ai un petit soucis avec les messages d'erreurs.

    j'ai le formulaire suivant :



    j'aimerais que mes messages d'erreurs soit les suivants :

    - 'Pseudo' est vide : vous devez le compléter
    - 'Mot de passe' est vide : vous devez le compléter

    voici mon script php FormulaireLogin.php:

    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
    <?php
     
    class FormulaireLogin extends Varex_Form {
     
    	private $elementDecorators = array(
            'ViewHelper',
    		array('Errors', array('class' => 'text')),
    		array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element')),
    		array('Label', array('tag' => 'td', 'class' => 'text')),
    		array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    	);
     
    	public $checkboxDecorators = array(
            'ViewHelper',
            'Errors',
    		array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element', 'align'=>'right')),
    		array('Label', array('tag' => 'td', 'class' => 'text', 'placement' => 'append')),
    		array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    	);
     
    	public $buttonDecorators = array(
            'ViewHelper',
    		array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element', 'colspan' => '2')),
    		array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    	);
     
    	public function __construct($options = null) {
    		parent::__construct($options);
    		$this->setName('authentification');
     
    		$username = new Zend_Form_Element_Text('username');
    		$username->setLabel('Pseudo')
    			->setOptions(array('class'=>'inputtext'))
    			->setRequired(true)
    			->addValidator('Alpha',
    				array('StringLength', false, array(3, 20)))
    			->setDecorators($this->elementDecorators);
     
    		$password = new Zend_Form_Element_Text('password');
    		$password->setLabel('Mot de passe')
    			->setOptions(array('class'=>'inputtext'))
    			->setRequired(true)
    			->addValidator(
    				'Alnum',
    				array('StringLength', false, array(6, 20)))
    			->setDecorators($this->elementDecorators);
     
    		$remember = new Zend_Form_Element_Checkbox('remember');
    		$remember->setLabel('Se souvenir de moi')
    			->setDecorators($this->checkboxDecorators);
     
    		$submit = new Zend_Form_Element_Submit('submit');
    		$submit->setLabel('Entrez')
    			->setOptions(array('class'=>'text'))
    			->setDecorators($this->buttonDecorators);
     
    		$this->addElements(array($username, $password, $remember, $submit));
     
    		$this->setDecorators(array(
    		    'FormElements',
    			array('HtmlTag', array('tag' => 'table', 'id' => 'connexionBoxTable')),
    		    'Form',
    		));
    	}
    }
    et le script Form.php (récupéré sur ce site) :

    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
    <?php 
     
    class Varex_Form extends Zend_Form
    {
        /**
        * construction du formulaire
        *
        * @param  mixed $options
        * @return void
        */
        public function __construct($options = null)
        {
            parent::__construct($options);
     
            // traduction des messages d'erreur de validation
            $french = array(
    	        'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.",
    	        'notAlpha' => "'%value%' ne contient pas que des lettres.",
    	        'notBetween' => "'%value%' n'est pas compris entre %min% et %max% inclus.",
    	        'notBetweenStrict' => "'%value%' n'est pas compris entre %min% et %max% exclus.",
    	        'dateNotYYYY-MM-DD'=> "'%value%' n'est pas une date au format AAAA-MM-JJ (exemple : 2000-12-31).",
    	        'dateInvalid' => "'%value%' n'est pas une date valide.",
    	        'dateFalseFormat' => "'%value%' n'est pas une date valide au format JJ/MM/AAAA (exemple : 31/12/2000).",
    	        'notDigits' => "'%value%' ne contient pas que des chiffres.",
    	        'emailAddressInvalid' => "'%value%' n'est pas une adresse mail valide selon le format adresse@domaine.",
    	        'emailAddressInvalidHostname' => "'%hostname%' n'est pas un domaine valide pour l'adresse mail '%value%'.",
    	        'emailAddressInvalidMxRecord' => "'%hostname%' n'accepte pas l'adresse mail '%value%'.",
    	        'emailAddressDotAtom' => "'%localPart%' ne respecte pas le format dot-atom.",
    	        'emailAddressQuotedString' => "'%localPart%' ne respecte pas le format quoted-string.",
    	        'emailAddressInvalidLocalPart' => "'%localPart%' n'est pas une adresse individuelle valide.",
    	        'notFloat' => "'%value%' n'est pas un nombre décimal.",
    	        'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.",
    	        'notInt'=> "'%value%' n'est pas un nombre entier.",
    	        'notLessThan' => "'%value%' n'est pas strictement inférieur à '%max%'.",
    	        'isEmpty' => "Ce champ est vide : vous devez le compléter.",
    	        'stringEmpty' => "Ce champ est vide : vous devez le compléter.",
    	        'regexNotMatch' => "'%value%' ne respecte pas le format '%pattern%'.",
    	        'stringLengthTooShort' => "'%value%' fait moins de %min% caractères.",
    	        'stringLengthTooLong' => "'%value%' fait plus de %max% caractères."
            );
     
            $translate = new Zend_Translate('array', $french, 'fr');
            $this->setTranslator($translate);
        }
    }
    Je vous remercie d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Tu pourrais utiliser la méthode setErrorMessages de Zend_Form_Element :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $username->setLabel('Pseudo')
             ->setOptions(array('class'=>'inputtext'))
             ->setRequired(true)
             ->setErrorMessages(array('required', "'Pseudo' est vide : vous devez le compléter"));
    Une utilisation de cette méthode :
    http://julien-pauli.developpez.com/t...Zend_Form#LXII

    La doc officielle qui la présente, avec d'autres méthodes de gestion des messages d'erreur pour Zend_Form_Element :
    http://framework.zend.com/manual/fr/...idation.errors

    Je crois que son inconvénient est l'utilisation des mêmes messages d'erreur quelle que soit la cause de l'invalidité.

    L'autre solution, utiliser la méthode setMessages() de Zend_Validate. Ca peut être fait soit directement sur le validateur en le créant avant de l'ajouter à l'élément, soit en passant les messages dans les options. Un exemple avec ces deux méthodes (non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $passwordNotEmpty = new Zend_Validate_NotEmpty();
    $passwordNotEmpty->setMessages(array(Zend_Validate_NotEmpty::IS_EMPTY => "'Pseudo' est vide : vous devez le compléter"));
     
    $password->setLabel('Mot de passe')
             ->setOptions(array('class'=>'inputtext'))
             ->addValidator($passwordNotEmpty, true)
             ->addValidator('Alpha',
                            array('StringLength',
                                  false,
                                  array('min' => 3,
                                        'max' => 20,
                                        'messages' => array(Zend_Validate_StringLength::TOO_SHORT => "Le pseudo '%value%' fait moins de 3 caractères.",
                                                            Zend_Validate_StringLength::TOO_LONG => "Le pseudo '%value%' fait plus de 20 caractères."))))
             ->setDecorators($this->elementDecorators);
    De même des exemples de son utilisation et la doc officielle :
    http://julien-pauli.developpez.com/t..._Validate#LVII
    http://framework.zend.com/manual/fr/...ction.messages

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Points : 39
    Points
    39
    Par défaut
    finalement, j'ai décidé de créer mon propre validateur de chaine vide pour lequel, dans le constructeur, on passe le label. :

    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
    <?php
     
    class Varex_Validate_NotEmpty extends Zend_Validate_Abstract {
     
        const IS_EMPTY = 'MyIsEmpty';
     
        protected $_messageTemplates = array(
            self::IS_EMPTY => "'%label%' is required and can't be empty"
        );
     
        protected $_messageVariables = array(
            'label' => '_label'
        );
     
        protected $_label;
     
        public function __construct($label)
        {
            $this->setLabel($label);
        }
     
        public function getLabel()
        {
            return $this->_label;
        }
     
        public function setLabel($label)
        {
            $this->_label = $label;
            return $this;
        }
     
        public function isValid($value)
        {
            $this->_setValue((string) $value);
     
            if (is_string($value)
                && (('' === $value)
                    || preg_match('/^\s+$/s', $value))
            ) {
                $this->_error();
                return false;
            } elseif (!is_string($value) && empty($value)) {
                $this->_error();
                return false;
            }
     
            return true;
        }
    }
    lors de la création du formulaire, j'ai donc le code suivant :

    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
    $username = new Zend_Form_Element_Text('username');
    		$username->setLabel('Pseudo')
    			->setOptions(array('class'=>'inputtext'))
    			->setRequired(true)
    			->addValidator(new Varex_Validate_NotEmpty($username->getLabel()),true)
    			->addValidator('Alpha',
    				array('StringLength', false, array(3, 20)))
    			->setDecorators($this->elementDecorators);
     
    		$password = new Zend_Form_Element_Text('password');
    		$password->setLabel('Mot de passe')
    			->setOptions(array('class'=>'inputtext'))
    			->setRequired(true)
    			->addValidator(new Varex_Validate_NotEmpty($password->getLabel()),true)
    			->addValidator(
    				'Alnum',
    				array('StringLength', false, array(6, 20)))
    			->setDecorators($this->elementDecorators);
    de plus, dans la classe qui etends la classe Zend_Form, j'ai ajouté la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'MyIsEmpty' => "'%label%' est vide : vous devez le compléter.",

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Points : 39
    Points
    39
    Par défaut
    la réponse en image :



    prochaine étape, grouper les erreurs (mais ça fera l'objet d'un futur post).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2014, 18h23
  2. Réponses: 4
    Dernier message: 31/05/2010, 09h54
  3. Retour à la ligne dans un message d'erreur
    Par Breezy dans le forum JSF
    Réponses: 5
    Dernier message: 01/08/2008, 17h55
  4. Réponses: 3
    Dernier message: 08/02/2008, 21h02
  5. Récupérer une exception dans une page d'erreur
    Par crawling5 dans le forum JSF
    Réponses: 3
    Dernier message: 15/11/2007, 09h46

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