我的目标是验证在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'验证器的正确语法是什么?
答案 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
的验证程序数组。