2012-02-26 9 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> 

私は、次の手順でそれを得た:

私は2つの要素が含まれているサブフォームでフォームを、持っている

$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()を呼び出した場合、compltionのために;検証、(ジャバスクリプトにより別のフィールドセットが追加された)後、私はこれを取得:

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

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

     ) 

) 

誰かが形成するように動作する方法を私に助言してもらえますか?理想的な解決策は、フォーム自体がそれぞれの値を別々に検証し、フィールドセット(displayGroup)を何回レンダリングすればよいかを見つけることです。

答えて

0

最初に、isArray => TRUEを設定し、選択したバリデータが文字列を評価するため、要素の検証に失敗します。

次は、フォームを生成する際に発行されるデータと同じ多次元配列にデータを供給する必要があると考えられるためです(配列は1対1にマップする必要があります)。

以下のリンクは、フォームを動的に作成する方法の例です。テンプレートをテンプレートとして使用してニーズを満たすことができるはずです。

Example of generating form elements with loop

関連する問題