Zend Form Element Regex Validator, кажется, отрицает значение, когда 0 - PullRequest
0 голосов
/ 02 марта 2012

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

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

Элемент:

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

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

Thx

1 Ответ

3 голосов
/ 02 марта 2012

Это очень просто, когда вы устанавливаете "required" как 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
...