Zend以递归方式对Zend_Filter_Input执行验证,因此代码为:
$data = array(
'update' => array(1, 2, 3)
);
$validators = array(
'update' => array(
new Zend_Validate_Callback('is_array'),
'presence' => 'required'
)
);
$filter = new Zend_Filter_Input(array(), $validators, $data);
var_dump($filter->isValid());
var_dump($filter->getMessages());
返回false
以及1,2和3不是有效值的消息。
验证值是否为数组的任何方法,而不应用递归规则?
答案 0 :(得分:1)
正如@zerkms所说:
Zend_Filter_Input执行递归遍历,所以a 特别验证者与此无关。
要解决这个问题,我正在使用“durty”方式:
$input = new Zend_Filter_Input(
array(
'the_field_should_be_array'=> array(
new MyPersonalValidator($this->_request->getParam('the_field_should_be_array')),
)
)
);
class MyPersonalValidator extends Zend_Validate_Abstract{
private $_paramIsValid;
public function __construct($param)
{
$this->_paramIsValid = is_array($param);
}
public function isValid($not_usefull)
{
if(!$this->_paramIsValid)
{
return false;
}
return true;
}}
代码说明:我在验证器的构造函数中执行字段验证。为此,需要将字段传递给构造函数,这不是一个好的实践,但我没有找到另一种方法。
编辑:干净的方法是扩展Zend_Filter_Input以支持上下文。我从来都不知道为什么它之前没有实现。