Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend MultiCheckbox:设置最大选择_Php_Zend Framework_Zend Form_Zend Form Element_Zend Validate - Fatal编程技术网

Php Zend MultiCheckbox:设置最大选择

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

这里我又提了一个简单的问题

是否有一个现有的zend验证器来设置用户可以选择的框的最大值。 我希望他们选择不超过3个框

我在网上搜索过,唯一发现的是在表单元素的isValid函数中设置了一个错误。但是我遇到了一个问题,每个选中的框都会显示错误。(4次或更多次)或者也许有人知道如何处理这个问题?如果我能够只显示一次这个错误,我的问题也会得到解决


谢谢您的帮助。

您可以使用我的验证器,它会检查值的数量。我使用的目的完全相同-验证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个值