これがハックすぎるかどうかはわかりません。
$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);
}
}
更新
エラーメッセージが重複しないように注意してください。フォームまたは要素を
呼び出すことができない場合。isValid
私の例のように、エラーメッセージを追加してデフォルトを設定するだけです。問題は、isValid($value)
が呼び出さ_getErrorMessages()
れ、そのメソッドが値に対してエラー メッセージをチェックすることです。
への呼び出しを避けることができない場合はisValid
、Multiselect 要素を拡張し、その _getErrorMessages()
メソッドを 1 つのロジックでオーバーライドします。そのメソッドは、Zend/Form/Element.php
クラスの一番下にあります。