Zend验证器和多维数组

3

如何在Zend框架(Zend_Filter_Input)中验证多维数组?

示例:

  • 输入必须是数组
  • 输入必须包含“roles”和“name”
  • “roles”必须是数组
  • “roles”中的所有元素都必须是数组
  • “roles”中的所有元素都必须具有“name”和“id”,“access”为可选项
  • “id”必须为整数
  • “access”必须是数组

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

1

几天前有一个类似的问题:将数组作为值传递给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;
    }
}

希望这有所帮助。

这是否意味着Morfi需要从客户端代码手动应用他的“逻辑验证”列表中的所有项目?如果是这样,那么适当的地方在哪里?在表单模型中吗? - cantera
@cantera25:我已经更新了我的答案,附上了我会采取的方法。 - dinopmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接