2013-07-29 49 views
0

我需要添加額外的字段的字段集,集成了一定的靈活性,我創建了Zend框架形式2.ZF2輸入過濾器添加到字段集

我想這一點使用方法的主要實現形式。

將輸入字段追加到Fieldset是沒有問題的,但問題始於輸入驗證和過濾。我不知道如何在添加到表單並解析getInputFilterSpecification部分後爲Fieldset實現Filter。

這是我目前的做法,這可悲的是不起作用:在這個問題上

public function addAdditionalField($data, $filterData = null) { 
    $fieldset = $this->get('additional'); 
    $fieldset->addElement($data); 

    if ($filterData !== null) { 
     $factory = new InputFactory(); 
     $filter = $this->getInputFilter(); 

     var_dump($filter->add($factory->createInputFilter(array('additional' => $filterData)))); 
    } 
} 

任何思緒之中?

+1

你知道['Zend \ Form \ Element \ Collection'](http://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html)嗎?這應該涵蓋你的問題。 – Sam

+0

我已經在使用集合,但重點是我需要手動將自定義字段添加到由輸入(API,數據庫)混合定義的表單中。就像一個字段集中的表單的自定義生成器一樣。 我只是沒有看到如何手動添加一個字段集包含的元素的過濾器 – ChrJantz

+0

事情是你的集合/字段集應包含所有可能的字段,包括它們的驗證器。現在,如果您的配置/ api顯示「沒有元素X」,那麼您將該字段集的元素和'setValidationGroup()'移除到除元素X之外的所有元素 - 您刪除不需要的東西,不添加東西 – Sam

回答

0

對於我使用的非常類似的任務和配置數組。本實施例中從登錄表單:

SRC /模塊/表格/ LoginForm.php

if($this->moduleSettings['enablCaptchaOnLogin'] === TRUE) 
{ 
    $captcha = new Element\Captcha('captcha'); 
    $captchaAdapter = new Captcha\Dumb(); 
    $captchaAdapter->setWordlen(7); 
    $captcha->setCaptcha($captchaAdapter) 
      ->setAttribute('title', 'Help to prevent SPAM'); 
    $this->add($captcha); 
} 
在/模塊/視圖/模塊/登錄

/index.phtml我使用了具有()函數:

if ($form->has('captcha')) 
    echo $this->formRow($form->get('captcha')) . PHP_EOL ; 

我希望這會有所幫助。檢查http://framework.zend.com/apidoc/2.2/classes/Zend.Form.Form.html