Zend Validators и многомерный массив - PullRequest
3 голосов
/ 29 ноября 2011

Как проверить многомерный массив в Zend Framework (Zend_Filter_Input)?

Пример:

  • Входные данные должны быть массивом
  • Входные данные должны иметь «роли» и «имя»
  • «роли» должны быть массивом
  • Все элементы в ролях должны быть массивом
  • Все элементы в ролях должны иметь имя и идентификатор, доступ не является обязательным * 1014
  • 'id' должен быть int
  • 'access' должен быть массивом

$input = array(
    'roles' => array(
        array('name' => 'Test', 'id' => 1),
        array('name' => 'Test2', 'id' => 2, 'access' => array('read', 'write'))
    ),
    'name' => 'blabla'
);

1 Ответ

1 голос
/ 29 ноября 2011

Несколько дней назад был похожий вопрос: Передача массива в качестве значения Zend_Filter

Короче говоря, если вы используете Zend_Filter_Input, он передаст значения массива индивидуально всвязанные валидаторы.Таким образом, невозможно использовать массив в целом, но отдельные компоненты.

РЕДАКТИРОВАТЬ : Возможное решение - создать собственный класс Zend_Validate и включить всепроверяет метод isValid, что-то вроде следующего:

class MyValidator extends Zend_Validate_Abstract
{
    const MESSAGE = 'message';

    protected $_messageTemplates = array(
        self::MESSAGE => "Invalid format for the array"
    );

    public function isValid($value)
    {
        if (!is_array($value)) {
            $this->_error();
            return false;
        }

        // ...

        return true;
    }
}

Надеюсь, что поможет,

...