0

一部のフィールドが行のように見えるフォームがあるので、JSを使用してそれらを追加/削除できます。例えば:

ID = 1のフィールド(既存の行)

<input id="id[1]" type="text" name="id[1]" value="1" />
<input id="name[1]" type="text" name="name[1]" value="100" />

ID = 2のフィールド(既存の行)

<input id="name[2]" type="text" name="name[2]" value="200" />
<input id="name[2]" type="text" name="name[2]" value="200" />

デフォルトで作成される新しい行(既存の行にもう1つの行を追加できるようにするため)

<input id="id[n0]" type="text" name="id[n0]" value="" />
<input id="name[n0]" type="text" name="name[n0]" value="" />

JSによって作成された新しい行

<input id="id[n1]" type="text" name="id[n1]" value="" />
<input id="name[n1]" type="text" name="name[n1]" value="" />

したがって、フォームを進めるよりも、更新する行と追加する行がわかります(インデックスが「n」で始まる場合は新規、インデックスが数値の場合は既存の要素)。

サブフォームを試しましたが、フィールドごとにサブフォームを作成する必要がありますか?次のコードを使用する場合:

$subForm = new Zend_Form_SubForm();
$subForm->addElement('Text', 'n0');
$this->addSubForm($subForm, 'pid');       
$subForm = new Zend_Form_SubForm();
$subForm->addElement('Text', 'n0');
$this->addSubForm($subForm, 'name');

このための最良の方法は何ですか?

1)サブフォームを使用しますか?

2)Zend / Form / Decorator / ViewHelper.phpを拡張して、name[nX]?のような名前を使用します。

3)他の解決策?

ありがとう。

4

1 に答える 1

2

別の方法は、すべてのフィールドが配置された単一のサブフォームを作成してから、これらのサブフォームの配列をメインフォームに追加することです。これは私がそのために使用するコードです:

        foreach ($value as $id => $row) {

                $subForm = clone $origSubForm;

                $name = 'multi[' . $id . ']';
                $subForm->setElementsBelongTo($name);
                $subForm->setName($name);
                $subForm->populate($row);

                $subForms[$id] = $subForm;
        }

これらのフォームを配列要素(この例ではmulti)に配置します。$id[]個々の値を含む配列の代わりに、次を含む1つの配列を取得します[0 => ['id' => .., ], 'n0' => ['id' => ...]]

于 2010-04-02T16:26:55.960 に答える