Валидаторы элементов формы Zend Framework - проверяют поле, даже если оно не требуется - PullRequest
3 голосов
/ 09 июня 2010

Есть ли способ запустить валидатор, даже если элемент формы не требуется?

У меня есть форма, в которой я хочу проверить содержимое поля texbox (убедитесь, что оно не пустое), если для значения другого элемента формы, который является парой переключателей, выбрано определенное значение.Прямо сейчас я делаю это, переопределяя функцию isValid () моего класса формы, и она прекрасно работает.Тем не менее, я хотел бы переместить это либо на его на валидаторе, либо использовать валидатор обратного вызова.Вот что у меня пока есть, но, кажется, он никогда не будет вызван, если я не изменю поле на setRequired (true), что я не хочу делать всегда, только если значение другого элемента формы установлено на определенныйзначение.

// 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;
    }
}

1 Ответ

3 голосов
/ 10 июня 2010

Похоже, если вы используете setAllowEmpty (false) вместо setRequired (false), тогда ваш валидатор все равно будет вызван. Итак, теперь у меня есть:

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

и он отлично работает

...