3

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

4

1 回答 1

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.
    );

您必须这样做的原因是因为在使用验证器时没有用于设置 haystack 的过滤器元命令。InArray有一些基本的元命令适用于许多验证器,但 haystack 不是其中之一。

要指定干草堆,Zend_Validate_InArray请使用 require 选项直接创建一个新对象,并将该验证器传递给给定的验证器数组Zend_Filter_Input

于 2012-08-14T20:31:15.397 回答