Zend Form Element Regex Validator, кажется, отрицает значение, когда 0

Сегодня я столкнулся с ошибкой в ​​моем приложении Zend Framework. В этом случае:

У меня есть форма с элементом, который имеет валидатор регулярных выражений. При проверке формы я обнаружил, что не могу предоставить значение 0 для элемента. Зенд дает мне ошибку, говоря, что я не заполнил элемент.

Элемент:

$element = $this->createElement( "text", "amount", array( "label" => "Amount", "required" => true ) );
$element->addValidator( 'regex', false, array( '/^[-]?([0-9]+)(([,.][0-9]+)+)?$/' ) );

Может кто-нибудь сказать мне, что может быть причиной того, что Zend говорит мне, что я не заполнил элемент, когда отправленное значение равно 0?

Спасибо

1 ответ

Решение

Это очень просто, когда вы устанавливаете "обязательно" как true, Zend_Form_Element автоматически добавляет валидатор notEmpty() вверху стека валидаторов.

Поэтому учитываются любые значения NULL, 0, "" и т. Д. false, и этот валидатор установил ошибку в вашей форме.

Смотрите руководство для получения дополнительной информации:

Поведение по умолчанию для Zend_Validate_NotEmpty

По умолчанию этот валидатор работает иначе, чем вы ожидаете, когда работаете с PHP-функцией empty(). В частности, этот валидатор будет оценивать как целое число 0, так и строку "0" как пустые.

$valid = new Zend_Validate_NotEmpty();
$value  = '';
$result = $valid->isValid($value);
// returns false
Другие вопросы по тегам