Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-06-2008 10:53:29

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

[Résolu][Zend_form] validation, remplir au moins un des deux champs

Bonjour,

J'ai besoin d'aide sur un cas pratique dans un formulaire.

Mon formulaire comporte deux champs "email de contact" et "email du commercial", j'aimerais faire en sorte qu'au moins un des deux champs soit rempli.
Comment déclarer ça proprement directement avec des validateurs dans mon formulaire.

Merci.

Dernière modification par Roulio (23-06-2008 12:01:23)

Hors ligne

 

#2 20-06-2008 11:02:44

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

en faisant deux champs séparés, je ne pense pas que cela soit possible

Par contre, tu peut peut etre essayer de le faire sur un champ(enfin 2 big_smile)

En gros 1er champ :
<input type='text' name='mail[1]'>
et le deuxieme :
<input type='text' name='mail[2]'>

Comme ca tu aura qu'une seule chose à vérifier, le 'mail'

Si il n'est pas vide, alors ca veux dire qu'au moins un des mails a été validé wink
Mais apres pr vérif la conformité des adresses .... hmm

Hors ligne

 

#3 20-06-2008 11:12:44

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

Tu peux créer ton propre validateurs qui verifie ca a ta place ( etends Zend_Validate_Abstract ). Va voir la maniere dont sont fait les validateurs (Zend/Validate/...).

Tu dois avoir toutes les cartes en mains pour le faire

Hors ligne

 

#4 20-06-2008 11:13:34

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

ok c'est noté.

J'attends de voir si y a d'autres possibilités. Comme tout le formulaire est gérer par  zend_form, j'aimerais quelque chose avec zend_validate...  mais j'ai aucune idée si ça existe.

Est-ce que c'est possible en créant comme un validateur de formulaire ou quelquechose qui y ressemble ?

*** @ ndesaleux : t'es plus rapide ; )

ok je vais y jeter un oeil merci

Dernière modification par Roulio (20-06-2008 11:14:40)

Hors ligne

 

#5 20-06-2008 13:00:08

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

Je tourne en rond...
après quelque recherche je suis tombé sur ces différents articles :
- http://devzone.zend.com/article/3450-De … -Zend_Form
- http://cogo.wordpress.com/2008/04/16/cu … m_element/
- http://www.nabble.com/Zend_Form-equal-inputs-(strings)-validation-td15215166.html

Je part du principe qu'un des deux champs est aux obligatoire (ici poste_email)

J'ai donc déclaré dans ma classe (qui créé mon formulaire)

Code:

...

/* Email du commercial */
$poste_commercial_mail = new Zend_Form_Element_Text('poste_commercial_mail');
$poste_commercial_mail->setLabel('Email du commercial');
$poste_commercial_mail->addValidator('EmailAddress', true, array(
    'message' => array (
        'test'=>Zend_Validate_EmailAddress::INVALID) 
    ));      
$this->addElement($poste_commercial_mail);

...

$poste_email = new Zend_Form_Element_Text('poste_email');
$poste_email->setLabel('Email de contact');
$poste_email->addValidator('EmailAddress', true, array(
    'message' => array (
        'test'=>Zend_Validate_EmailAddress::INVALID) 
    ));  
$valid = new Mylib_Validate_AtLeastThisField('poste_commercial_mail'); 
$poste_email->addValidator($valid);  
$this->addElement($poste_email);

et mon validateur : dans Mylib/Validate/AtLeastThisField.php

Code:

<?php
require_once 'Zend/Validate/Abstract.php';

class Mylib_Validate_AtLeastThisField extends Zend_Validate_Abstract {
    
    protected $_contextKey; 

    const BOTH_EMPTY = 'bothFieldEmpty';
    const FIELD_NOT_FOUND = 'confirmationNotFound'; 

    protected $_messageTemplates = array(
        self::BOTH_EMPTY => 'Both field are empty',
        self::FIELD_NOT_FOUND => 'No field check was submitted'
    );

    /**
     * Constructor of this validator
     *
     * The argument to this constructor is the third argument to the elements' addValidator
     * method.
     *
     * @param array|string $fieldsToMatch
     */
    public function __construct($contextKey) 
    { 
        $this->_contextKey = $contextKey; 
    } 

    /**
     * Check if the element using this validator is valid
     *
     * This method will compare the $value of the element to the other elements
     * it needs to match. If they all match, the method returns true.
     *
     * @param $value string
     * @param $context array All other elements from the form
     * @return boolean Returns true if the element is valid
     */
    
    public function isValid($value, $context = null) 
    { 
        if ((null === $context) || !is_array($context) 
            || !array_key_exists($this->_contextKey, $context)) 
        { 
            $this->_error(self::FIELD_NOT_FOUND); 
            return false; 
        } 

        $fieldValue = $context[$this->_contextKey]; 
        if (empty($value) && empty($fieldValue)) { 
            $this->_error(self::BOTH_EMPTY); 
            return false; 
        } 

        return true; 
    } 
    
}

rien n'y fait je n'ai jamais de message d'erreur. Même si je copie/colle le validateur NotEmpty dans ce fichier (histoire de tester avec un validateur exitant) je n'ai pas de message d'erreur de ce validateur. Pourtant je reçoit les messages des autres validateurs hmm

Hors ligne

 

#6 20-06-2008 14:51:42

cortex
Membre
Date d'inscription: 22-05-2008
Messages: 33

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

Essaie de regarder du coté de http://framework.zend.com/manual/en/zen … nds.fields

Il parle de comment faire pour valider qu'un mot de passe ou autre chose a été saisi deux fois pareils en reposant sur le StringEquals. Tu pourrais te baser sur le meme principe.

Dernière modification par cortex (20-06-2008 14:52:02)

Hors ligne

 

#7 23-06-2008 12:01:06

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Résolu][Zend_form] validation, remplir au moins un des deux champs

Bonjour,

je vous apporte la solution (très simple finalement) que j'ai trouvé.

En utilisant la création perso de validateur, je n'arrive pas à afficher les messages d'erreurs quand le champ n'est pas rempli. Par contre quand le champ est rempli il m'affiche bien les messages.

J'ai donc regardé du côté de setRequired qui lui détecte si un champ est envoyé dans le formulaire.
Et la solution se trouve dans le controlleur. j'ai donc :

Code:

// Envoie du formulaire
if ($this->getRequest()->isPost()) {

    $formData = $this->_request->getPost(); // Récupère les données envoyées
    
    if($form->getValue('poste_commercial_mail')== ''){ $form->poste_email->setRequired(true); } // ajout du validateur si le champ 'poste_commercial_mail' est vide.

Magique ! J'ai bien ce que je voulais au début c'est à dire au moins le champ 'poste_email' de rempli si 'poste_commercial_mail' est vide.

a++

Dernière modification par Roulio (23-06-2008 12:01:53)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages