【问题标题】:Zend Framework InArray validator array syntaxZend Framework InArray 验证器数组语法
【发布时间】:2012-08-14 19:19:19
【问题描述】:

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

【问题讨论】:

  • 你将这些验证器传递给什么? haystack 应该是它自己的索引,就像 messages 一样,而不是 InArray 键上的数组元素。
  • 为了清楚起见,我更新了问题。你是说'InArray' 会被声明为'digits','haystack' 作为一个单独的索引? [好吧,那不行。它导致 Zend_Validate_InArray 的 Missing 参数]
  • 看我的回答,我想你可能一直在尝试将数组传递给 Zend_Form ,它会接受一个 haystack 参数,尽管不是上面提供的格式。

标签: zend-framework zend-validate


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多