Zend Framework InArray验证器数组语法

时间:2012-08-14 19:19:19

标签: zend-framework zend-validate

我的目标是验证在URL中传递的参数,因此我创建了一个validate方法,其中包含要运行的验证器列表,如下所示:

$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'验证器的正确语法是什么?

1 个答案:

答案 0 :(得分:3)

要将其他规则和属性传递给要与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验证程序时没有用于设置haystack的过滤器metacommands。有一些基本的元命令适用于许多验证器,但是haystack不是其中之一。

要指定haystack,请直接使用require选项创建一个新的Zend_Validate_InArray对象,并将该验证程序传递给赋予Zend_Filter_Input的验证程序数组。