1

ZF2 が追加され、ページがロードされた後に sformCollectionを動的に追加できるようになりました。formElement

次のようなテキストフィールドが必要な行の動的な量のテーブルがあります。

foreach ($types as $type) : 
    ?>
    <tr><td><?php echo $type ?></td><td><?php echo $this->formRow($form->get('amount')); ?></td></tr>
    <?php 
 endforeach;

アイテムの配列をループしてテーブルの行/列を印刷していますが、formCollection では一度にすべてのフィールドしか印刷できないようです。

おそらくループごとにテキストフィールドの1つを印刷することは可能ですか? すべてのドキュメントで、テンプレートと JavaScript を使用して要素を動的に追加する方法について説明しています。しかし、私は基本的に、すでに量を知っている入力の配列が欲しいだけです。

countコントローラーでも変更できないようです。これを試しました:

$types = array(1,2,3,4,5)
$form = new ThingsForm();
$form->get('amounts')->setOptions(array(
    'count' => count($types)
));

コレクションを持っているだけでcount => 1印刷してみましたが、それらを埋めると1つのアイテムとしてしか扱われません。

4

2 に答える 2

0

私はそれをクラックしたようで、簡単ではなかったので、これが推奨される方法なのか、それとも考えられないユースケースなのか疑問に思います:

コレクションアイテム:

$this->add(array(
        'type'      => 'Zend\Form\Element\Collection',
        'name' => 'amounts',
        'options' => array(
            'allow_add' => true,
             // Has to be 0 as you set the count later (and that adds)
            'count' => 0,
            'target_element' => array(
                'type' => 'Application\Form\AmountForm'
            )

        ),
        'required'  => true,
    ));

フォームを取得し、コントローラー アクションのような場所にカウントを設定します。

$form = new AmountTypesForm();
$form->get('amounts')->setOptions(array(
    'count' => count($typesOfThings)
))->prepareFieldset();

ビュー内のループ

foreach ($types as $type) : 
    ?>
    <tr><td><?php echo $type ?></td><td><?php echo $this->formRow($form->get('amount')->getIterator()->extract()); ?></td></tr>
    <?php 
 endforeach;
于 2012-10-25T20:26:55.727 に答える