gpt4 book ai didi

php - 验证 Zend Form Multiselect 中的选项数量

转载 作者:可可西里 更新时间:2023-10-31 23:43:30 26 4
gpt4 key购买 nike

我有一个包含许多选项的 Multiselect Zend Form 元素。 我必须验证所选选项的数量(至少选择了 N 个选项,最多选择了 M 个选项)。我希望错误消息像常规 Zend Validate 错误消息一样打印在表单中。

执行此操作的最简单(也是最简单)的方法是什么?

常规验证器无法执行此操作,因为每个选定值都是完全单独验证的。

我试图覆盖表单的 isValid 方法并在那里添加逻辑(如果数字超出允许范围则返回 false 并添加错误消息),但这导致错误消息被打印多次(对于每个选定的值).我觉得试图解决这个问题会导致代码极其复杂。

感谢帮助

最佳答案

不知道这对你来说是不是太hacky了。

$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() 方法。您可以在底部的 Zend/Form/Element.php 类中找到该方法。

关于php - 验证 Zend Form Multiselect 中的选项数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com