2010-06-09 5 views
3

Existe-t-il un moyen de déclencher un validateur même si l'élément de formulaire n'est pas requis?Validateurs d'élément de formulaire Zend Framework - Valider un champ même s'il n'est pas requis

J'ai un formulaire où je veux valider le contenu d'une texbox (assurez-vous de ne pas vider) si la valeur d'un autre élément de formulaire, qui est un couple de boutons radio, a une valeur spécifique sélectionnée. En ce moment, je le fais en remplaçant la fonction isValid() de ma classe de formulaire et cela fonctionne très bien. Cependant, j'aimerais déplacer ceci vers son validateur ou utiliser le validateur de rappel. Voici ce que j'ai jusqu'ici, mais il ne semble jamais être appelé à moins que je change le champ à setRequired (true) que je ne veux pas faire à tout moment, seulement si la valeur de l'autre élément de formulaire est définie sur un valeur.

// In my form class's init function 
$budget = new Zend_Form_Element_Radio('budget'); 
$budget->setLabel('Budget') 
    ->setRequired(true) 
    ->setMultiOptions($options); 

$budgetAmount = new Zend_Form_Element_Text('budget_amount'); 
$budgetAmount->setLabel('Budget Amount') 
->setRequired(false) 
->addFilter('StringTrim') 
->addValidator(new App_Validate_BudgetAmount()); 

//Here is my custom validator (incomplete) but just testing to see if it even gets called. 
class App_Validate_BudgetAmount extends Zend_Validate_Abstract 
{ 
    const STRING_EMPTY = 'stringEmpty'; 

    protected $_messageTemplates = array(
     self::STRING_EMPTY => 'please provide a budget amount' 
    ); 

    public function isValid($value) 
    { 
     echo 'validating...'; 
     var_dump($value); 
     return true; 
    } 
} 

Répondre

3

On dirait que si vous utilisez setAllowEmpty (false) à la place de setRequired (false) alors vous validateur encore obtenir appelé. J'ai donc maintenant:

$budgetAmount->setLabel('Budget Amount') 
    ->setAllowEmpty(false) 
    ->addFilter('StringTrim') 
    ->addValidator(new App_Validate_BudgetAmount()); 

et il fonctionne très

+0

Si cela ne pas être '' 'setAllowEmpty (true)' ''? – Tom

+0

il est réglé sur "AllowEmpty" (FALSE) aussi trompeur que cela puisse paraître. – Chayemor

Questions connexes