Zend验证器和多维数组

时间:2011-11-29 08:17:58

标签: php multidimensional-array zend-validate zend-framework

如何验证Zend Framework中的多维数组(Zend_Filter_Input)?

示例:

  • 输入必须为数组
  • 输入必须包含'roles'和'name'
  • 'roles'必须是数组
  • 'roles'中的所有元素必须是数组
  • 'roles'中的所有元素必须包含'name'和'id','access'是可选的
  • 'id'必须是int
  • 'access'必须是数组

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

1 个答案:

答案 0 :(得分:1)

前几天有一个类似的问题:Passing an array as a value to 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;
    }
}

希望有所帮助,