Zend MultiCheckbox: установить максимальный выбор - PullRequest
3 голосов
/ 07 ноября 2011

Здесь я снова с простым вопросом.

Существует ли существующий валидатор Zend для установки максимума для ящиков, которые пользователь может выбрать.Я хочу, чтобы они выбирали не более 3 полей.

Я искал в Интернете, и единственное, что я обнаружил, - это установление ошибки в функции isValid в элементе формы.Но тогда у меня есть проблема, ошибка отображается для каждого выбранного окна.(так 4 или более раз) Или, может быть, кто-нибудь знает, как бороться с этой проблемой?Если бы я мог отобразить эту ошибку только один раз, моя проблема также будет решена.

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Вы можете использовать мой валидатор, он проверяет количество значений.Я использовал точно для тех же целей - для проверки максимального и минимального количества выбранных значений в множественном выборе:

<?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;
    }
}
1 голос
/ 02 июня 2012

Я только что боролся с этим сегодня. Это ошибка Zend. http://framework.zend.com/issues/browse/ZF-11667. В этом выпуске есть разница для исправления, но она не появится, пока не выйдет 1.12. Я не хотел ждать, поэтому я исправил свой Zend_Form_Element. Исправление работает отлично. Перед исправлением мои сообщения об ошибках в MultiChecks повторялись один раз для каждого флажка, который был отмечен.

...