Не знаю, слишком ли это для вас.
$element = new Zend_Form_Element_Multiselect('CheckThis');
$options = array(
1 => 'Option One',
2 => 'Option Two',
3 => 'Option Three',
4 => 'Option Four',
5 => 'Option Five',
6 => 'Option Six',
7 => 'Option Seven',
8 => 'Option Eight',
);
$element->addMultiOptions($options);
$betweenOptions = array('min' => 2, 'max' => 4);
$betweenValidator = new Zend_Validate_Between($betweenOptions);
$betweenValidator->setMessage("The number of submitted values '%value%' is not between '%min%' and '%max%', inclusively",'notBetween');
if ( true === $this->getRequest()->isPost() ) {
if ( true === $betweenValidator->isValid(count($_POST['CheckThis'])) ) {
$form->isValid($_POST);
} else {
$messages = $betweenValidator->getMessages();
$element->addError($messages['notBetween']);
$form->setDefaults($_POST);
}
}
ОБНОВЛЕНИЕ
Примечание, чтобы избежать повторяющихся сообщений об ошибках.
Если вы не можетеt вызвать isValid
в форме или элементе;как в моем примере, где я только добавляю сообщение об ошибке и устанавливаю значения по умолчанию.Проблема в том, что isValid($value)
вызовет _getErrorMessages()
, и этот метод проверяет сообщения об ошибках по значениям.
Если вы не можете избежать вызова isValid
, я бы расширил элемент Multiselect и переопределил бы этот _ getErrorMessages()
метод с моей единой логикой.Вы можете найти этот метод в классе Zend/Form/Element.php
полностью внизу.