Синтаксис массива валидатора Zend Framework InArray

Моя цель — проверить параметры, переданные в URL-адресе, поэтому я создал метод проверки со списком запускаемых валидаторов, например:

$validators = array(
        'number' => array(
            'digits',
            'presence' => 'required',
            'messages' => array(
                "%value%' is not a valid number.",
            ),
        ),
        'country' => array(
            'presence' => 'required',
            'InArray' => array('haystack' => array('USA', 'CAN', 'AUS', 'JPN')),
            'messages' => array(
                "'%value%' is not a valid country code.",
            ),
        ),
        // etc. 
);

$valid = new Zend_Filter_Input(array(), $validators, $data);
return $valid->isValid()

Проблема в том, что валидатор InArray ничего не делает. Ошибок не выдает, просто не работает. Я предполагаю, что я неправильно понимаю синтаксис.

Каков правильный синтаксис для валидатора InArray?


person Ian    schedule 14.08.2012    source источник
comment
Чему вы передаете эти валидаторы? haystack, вероятно, должен быть собственным индексом, как messages, а не элементом массива на ключе InArray.   -  person drew010    schedule 14.08.2012
comment
Я обновил вопрос для ясности. Вы говорите, что «InArray» будет объявлен как «цифры», а «стог сена» будет отдельным индексом? [Хорошо, это не работает. Это приводит к отсутствующему аргументу для Zend_Validate_InArray]   -  person Ian    schedule 15.08.2012
comment
Смотрите мой ответ, я думал, что вы, возможно, пытались передать массив Zend_Form, который принял бы параметр стога сена, хотя и не в формате, указанном выше.   -  person drew010    schedule 15.08.2012


Ответы (1)


Чтобы передать дополнительные правила и свойства валидаторам для использования с Zend_Filter_Input, создайте конкретный экземпляр объекта и установите его в качестве вашего валидатора следующим образом:

    $validators = array(
            'number' => array(
                    'digits',
                    'presence' => 'required',
                    'messages' => array(
                            "%value%' is not a valid number.",
                    ),
            ),
            'country' => array(
                    new Zend_Validate_InArray(
                        array('haystack' => array('USA', 'CAN', 'AUS', 'JPN'))
                    ),
                    'presence' => 'required',
                    'messages' => array(
                            "'%value%' is not a valid country code.",
                    ),
            ),
            // etc.
    );

Причина, по которой вы должны сделать это, заключается в том, что нет фильтра метакоманды для настройки стога сена при использовании валидатора InArray. Есть несколько основных метакоманд, которые применимы ко многим валидаторам, но стог сена не входит в их число.

Чтобы указать стог сена, создайте новый объект Zend_Validate_InArray напрямую с требуемыми параметрами и передайте этот валидатор массиву валидаторов, предоставленному Zend_Filter_Input.

person drew010    schedule 14.08.2012