2012-05-01 29 views
2

的Zend Zend_Filter_Input的執行驗證遞歸,所以代碼:如何驗證值是否是使用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

不想使用'$ data = array( 'update'=> array(array(1,2,3)) );'? –

+0

@ b.b3rn4rd:不會;-) – zerkms

+0

您是否找到解決方案?我查看過'Zend_Filter_Input'源代碼,在:1011它使得字段值是一個數組,如果它不是,並且它的foreach:1024。所以我猜測唯一的解決方案是擴展'Zend_Filter_Input',或者按照以前建議的方式將值包裝在數組中? –

回答

1

正如@zerkms說:

的Zend_Filter_Input進行遞歸遍歷,所以 特定的驗證可沒什麼用它做。

爲了解決這個問題,我使用「的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以支持上下文。我從來沒有新的爲什麼它沒有實施之前。

+0

太髒了,無法使用:-)檢查,因爲會有別無其他答案 – zerkms

相關問題