2016-04-20 8 views
0

フォームのZend 2で 'InArray'バリデーターを実装しようとしていますが、無効に戻っています。Zend 2フォームバリデータ 'InArray' - 複雑な配列が無効返される

フォーム要素のセットアップ:

$enquiryType = new Element\Select('enquiryType'); 
    $enquiryType->setLabel('* What is your enquiry about?') 
        ->setLabelAttributes(array('class' => 'sq-form-question-title')) 
        ->setAttribute('class', 'sq-form-field required') 
        ->setValueOptions($enquiryTypes); 

フィルター/バリのセットアップ:ここでは、コードです

$enquiryType = new Input('enquiryType'); 
    $enquiryType->getValidatorChain() 
      ->addByName('InArray', array('haystack' => $enquiryTypes)); 

そして、ここではmodule.config経由で$ enquiryTypesに渡される配列です.phpファイル

 'enquiryCategories' => array(
           'empty_option' => 'Please select an option', 
           array(
            'label' => 'General enquiries', 
            'options' => array( 
             'skype' => 'Skype with your library feedback', 
             'question' => 'Ask a question', 
             'feedback' => 'Library feedback', 
             'eresource' => 'Electronic resources (e.g. e-book, e-journal, database)', 
             'webbridge' => 'WebBridge Problems', 
             'dro' => 'DRO' 
            ) 
           ), 
           array(
            'label' => 'Application to review', 
            'options' => array(
             '10400' => 'I\'ve returned the item', 
             '10401' => 'I didn\'t know about overdue points but now I have some', 
             '10402' => 'Why did I get this invoice?', 
             '10403' => 'The item I borrowed is lost', 
             '10404' => 'The item I borrowed has been damaged', 
             '10405' => 'I never got/had the book', 
             '10406' => 'Other' 
            ) 
           ) 
          ), 

私はこれのさまざまなバリエーションを試しました(再帰的検証alそう)しかし、これを働かせることができませんでした。次のように私が試してみた

答えて

0

私はついにこのための解決策を得ました。私はもっ​​と良い解決策があるべきだと思っていますが、私は見つけられませんでした。ここで

は、私が使用するフィルタです:

$enquiryType = new Input('enquiryType'); 
$enquiryType->getValidatorChain() 
     ->addByName('InArray', array('haystack' => array_keys(
            $enquiryTypes[0]['options']+$enquiryTypes[1]['options'] 
           ))); 
$enquiryType->getFilterChain() 
     ->attach(new Filter\StringToLower()) 
     ->attachByName('StripTags'); 

は基本的に私はまっすぐに連想配列に配列オプションをdisectしなければなりませんでした。このインスタンスでは配列が静的なままなので、これはうまくいきます。

データが動的になった場合、より多くの何かが必要とされるであろう(ループを通過し、「オプション」キーを見つけ、配列などをフィルタリングするために子を追加...)

1

ことの一つは、次のとおりです。

$enquiryType = new Input('enquiryType'); 
    $enquiryType->getValidatorChain() 
      ->addByName('InArray', array('haystack' => $enquiryTypes['enquiryCategories'])); 

私はと言う理由、あなたはおそらく、配列の内部配列を作成する可能性があるように見えるということです。私がその説明を誤解していない限り。

それはあなたのために働いていない場合は、次の質問

ZF2: How do I use InArray validator to validate Multiselect form element?

幸運で指摘したように、その後多分あなたは爆発のオプションを検討する必要があるかもしれません。

+0

私がリンクされ、質問を見ていたが、これはあります1つの選択ドロップダウンだけ。配列内の配列は、基本的にタグ内の選択可能な項目です。リンクされた質問は、私がこの状況でバリデータを使用することについてもう少し理解する助けとなりました。 – adamst85

関連する問題