如何使用Zend_Filter_Input验证值是否为数组?

时间:2012-05-01 04:12:45

标签: php zend-framework

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不是有效值的消息。

验证值是否为数组的任何方法,而不应用递归规则?

1 个答案:

答案 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以支持上下文。我从来都不知道为什么它之前没有实现。