2012-05-01 15 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' =>配列(配列(1,2,3)) );'? –

+0

@ b.b3rn4rd:nope ;-) – 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

関連する問題