Php Zend MultiCheckbox:设置最大选择
这里我又提了一个简单的问题 是否有一个现有的zend验证器来设置用户可以选择的框的最大值。 我希望他们选择不超过3个框 我在网上搜索过,唯一发现的是在表单元素的isValid函数中设置了一个错误。但是我遇到了一个问题,每个选中的框都会显示错误。(4次或更多次)或者也许有人知道如何处理这个问题?如果我能够只显示一次这个错误,我的问题也会得到解决Php Zend MultiCheckbox:设置最大选择,php,zend-framework,zend-form,zend-form-element,zend-validate,Php,Zend Framework,Zend Form,Zend Form Element,Zend Validate,这里我又提了一个简单的问题 是否有一个现有的zend验证器来设置用户可以选择的框的最大值。 我希望他们选择不超过3个框 我在网上搜索过,唯一发现的是在表单元素的isValid函数中设置了一个错误。但是我遇到了一个问题,每个选中的框都会显示错误。(4次或更多次)或者也许有人知道如何处理这个问题?如果我能够只显示一次这个错误,我的问题也会得到解决 谢谢您的帮助。您可以使用我的验证器,它会检查值的数量。我使用的目的完全相同-验证multiselect中所选值的最大数和最小数: <?php cla
谢谢您的帮助。您可以使用我的验证器,它会检查值的数量。我使用的目的完全相同-验证multiselect中所选值的最大数和最小数:
<?php
class App_Validate_ValuesNumber extends Zend_Validate_Abstract
{
const TOO_LESS = 'tooLess';
const TOO_MUCH = 'tooMuch';
protected $_type = null;
protected $_val = null;
/**
* @var array
*/
protected $_messageTemplates = array(
self::TOO_LESS => "At least %num% values required",
self::TOO_MUCH => "Not more then %num% required",
);
/**
* @var array
*/
protected $_messageVariables = array(
'num' => '_val'
);
/**
* Constructor for the integer validator
*
* @param string $type Comparison type, that should be used
* TOO_LESS means that value should be greater then items number
* TOO_MUCH means opposite
* @param int $val Value to compare items number with
*/
public function __construct($type, $val)
{
$this->_type = $type;
$this->_val = $val;
}
/**
* Defined by Zend_Validate_Interface
*
* Returns true if and only if $value is a valid integer
*
* @param string|integer $value
* @return boolean
*/
public function isValid($value)
{
// Value shoul dbe greated
if ($this->_type == self::TOO_LESS) {
if (count($value) < $this->_val) {
$this->_error(self::TOO_LESS);
return false;
}
}
// Value should be less
if ($this->_type == self::TOO_MUCH) {
if (count($value) > $this->_val) {
$this->_error(self::TOO_MUCH);
return false;
}
}
return true;
}
}
我今天刚打过这场仗。这是一个zend bug。在这个问题上有一个不同的解决方案,但是在1.12版本发布之前它不会出现。我不想等待,所以我修补了Zend_表单元素。修复效果很好。在修复多检查上的“我的错误”消息之前,每个选中的框都会重复一次。如果要对它们进行分组,请为您自己快速编写的组添加一个验证器。然后显示组中的错误,而不是每个元素。自己编写验证程序当然是另一个好的解决方案!我做了一些更改,因为验证器正在每个复选框上运行。所以$value始终只包含1个值。我改为使用$context参数来获取值。$this->someFormElement->->addValidator(新的App\u Validate\u ValuesNumber(App\u Validate\u ValuesNumber::TOO\u LESS,3))
意味着应该选择不少于3个值