2012-08-23 20 views
0

我想篩選和驗證每個項目並驗證整個檢查沒有重複。該集合中有任意數量的文本輸入。如何在使用集合時向InputFilter添加條目?

$this->add(array(
     'type' => 'Zend\Form\Element\Collection', 
     'name' => 'aliasList', 
     'options' => array(
      'label' => 'Alias', 
      'count' => 2, 
      'allow_add' => true, 
      'target_element' => array(
       'type' => 'Zend\Form\Element\Text' 
      ) 
     ) 
    )); 

我嘗試添加下面的代碼,但我很難過我的手指。它顯然沒有工作。它希望可能有一個選項,如'oneach' = true

$inputFilter->add($factory->createInput(array(
     'name' => 'aliasList', 
     'required' => false, 
     'filters' => array(
      array('name' => 'StripTags'), 
      array('name' => 'StringTrim'), 
     ), 
    ))); 

我還打算爲有效的URI添加驗證器並重復失敗。不幸的是,當我使用ZF2時,我認爲我將等待很長時間才能讓另一位ZF2開發者前來。

回答

3

這可能不會以1:1的比例幫助您解決問題,但您可能想嘗試通過將集合添加爲字段集來解決此問題。在大多數情況下,您添加到集合中的任何內容都是不同的類型,因此,僅通過邏輯,應該位於單獨的字段集上。

因此,您可能需要嘗試該方法。我想你知道的博客,如果不是在這裏是一個非常有用的鏈接http://www.michaelgallego.fr/blog/?p=190

$this->add(array(
    'type' => 'Zend\Form\Element\Collection', 
    'name' => 'categories', 
    'options' => array(
     'label' => 'Please choose categories for this product', 
     'count' => 2, 
     'should_create_template' => true, 
     'allow_add' => true, 
     'target_element' => array(
      'type' => 'Application\Form\CategoryFieldset' 
     ) 
    ) 
)); 

這樣,你從一個字段和字段集inputFilters和驗證Collection添加的元素將通過

public function getInputFilterSpecification() {} 

加入來自Fieldset-Class。

+0

這是一個很大的幫助山姆,謝謝。我也遇到了綁定表單的麻煩。看起來Collection僅僅希望target_element是一個包含一個名爲object的成員的元素,否則就會被破壞。所以綁定不適用於標準表單元素的集合。請參閱rc4中的./library/Zend/Form/Element/Collection.php中的#481行。 –

+0

我現在刪除了正確的答案,因爲我沒有;不想放棄囤積:) –

0

您可以使用SMT,如:

$inputFilter = new InputFilter(); 
$inputFilter->add($factory->createInput(array(
    'name' => 'aliasList', 
    'required' => false, 
    'filters' => array(
     array('name' => 'StripTags'), 
     array('name' => 'StringTrim'), 
    ), 
))); 

$collectionFilter = new CollectionInputFilter(); 
$collectionFilter->setInputFilter($inputFilter); 
相關問題