2012-02-26 54 views
1

我需要動態擴展zend表格的幫助。如何驗證和渲染動態擴展zend表格

我與窗體形式,其包含兩個元素:

<form> 
    <fieldset class="itemGroup"> 
    <label> 
     Question 
     <input type="text" name="items[questions][]" value=""> 
    </label> 
    <label> 
     Answer 
     <input type="text" name="items[answers][]" value=""> 
    </label> 
    </fieldset> 
</form> 

我用下列方法獲得的:

$itemsSubform = new Zend_Form_SubForm(); 
$form->addSubForm($itemsSubform, 'items'); 
$itemsSubform->setElementsBelongTo('items'); 

$itemQuestion = new Zend_Form_Element_Text('questions', array(
    'label' => 'Question', 
    'isArray' => true, 
    'filters' => array(
     'stringTrim', 
    ), 
    'validators' => array(
     array('stringLength', array('max' => 255)), 
    ), 
)); 

$itemAnswer = new Zend_Form_Element_Text('answers', array(
    'label' => 'Answer', 
    'isArray' => true, 
    'filters' => array(
     'stringTrim', 
    ), 
    'validators' => array(
     array('stringLength', array('max' => 255)), 
    ), 
)); 

$itemsSubform->addDisplayGroup(array($itemQuestion, $itemAnswer), 'itemGroup'); 

如果需要,我只複製所有字段集用於由JavaScript延伸形式。

所有工作正常,直到我提交表單。在驗證期間沒有元素驗證,並且在呈現形式期間,由這樣的數據填充,我從類Zend_View_Abstract獲得錯誤消息,轉義值是數組而不是字符串(在渲染元素中爲逃避其值)調用此方法。如果我打電話給$ form-> getValues();如果我想調用$ form-> getValues();如果我調用$ form-> getValues()。確認後,(由JavaScript另一個字段集添加)我得到這個:

Array 
(
    [items] => Array 
     (
      [questions] => Array 
      (
       [0] => lorem 
       [1] => dolor 
      ) 

      [answers] => Array 
      (
       [0] => ipsum 
       [1] => sit 
      ) 

     ) 

) 

有人能告訴我如何做人形成?理想的解決方案是當表單自己分別驗證每個值並查找呈現fieldset(displayGroup)的次數時。

回答

0

首先你的元素無法驗證,因爲你設置了isArray => TRUE並且你選擇的驗證器評估字符串。

接下來你將填充表單問題,我認爲這可能是由於你需要提供數據來填充表單產生的相同多維數組(這些數組應該映射一對一)。

下面的鏈接是關於如何動態構建表單的示例,您應該能夠將其用作模板以生成一個滿足您的需求的模板。

Example of generating form elements with loop