2

zendでこのようなものを入手する必要があります

<input type="text" name="phone[1]" value="" />
<input type="text" name="address[1]" value="" />
<input type="text" name="banana[1]" value="whatever" />

角かっこ内に同じIDがあることに注意してください。(私は必要ありませんname="phone[]"、またはname="phone[phone1]"

https://stackoverflow.com/a/3673034/579646https://stackoverflow.com/a/406268/579646https://stackoverflow.com/a/7061713/579646を試してみました

問題はZendFrameworkにあり、同じ名前「1」の3つの要素に名前を付ける必要があり、最後の要素が前の要素を上書きします。3つのサブフォームを作成しても、同じ効果が得られます。

さまざまな例は、インデックスが異なる、またはindex([])がない配列を取得する方法を示していますが、同じインデックスを持つには別の配列が必要です。

ありがとう

4

2 に答える 2

4

Zend_Formには、この名前の機能がありますsetElementsBelongTohttp://framework.zend.com/manual/1.12/en/zend.form.advanced.htmlを参照して ください

これを使用する方法は、Zend_Formオブジェクトにプレフィックスを設定することです。setElementsBelongTo各フィールドを反復処理する場合は、サブフォームを使用してフィールドの各グループをカプセル化できます。

setElementsBelongToコントローラまたはinit()フォームクラスのメソッドでを呼び出すことができます。

$mainForm = new Zend_Form();

$phoneForm = new Zend_Form_Subform();
$element = $phoneForm->createElement('text', '1'); // 1 is the element inside of the brackets
$phoneForm->addElement($element);
$phoneForm->setElementsBelongTo('phone'); // phone is the part leading the brackets
$mainForm->addSubform($phoneForm, 'phone_form');

$phoneForm = new Zend_Form_Subform();
$element = $phoneForm->createElement('text', '2'); // 1 is the element inside of the brackets
$phoneForm->addElement($element);
$phoneForm->setElementsBelongTo('phone'); // phone is the part leading the brackets
$mainForm->addSubform($phoneForm, 'phone_form2');

$addressForm = new Zend_Form_Subform();
$element = $addressForm->createElement('text', '1');
$addressForm->addElement($element);
$addressForm->setElementsBelongTo('address');
$mainForm->addSubform($addressForm, 'address_form');

echo $mainForm;

var_dump($mainForm->getValues());

与える

 array(2) { 
["phone"]=> array(2) { [1]=> NULL [2]=> NULL } 
["address"]=> array(1) { [1]=> NULL } } 

期待どおりの結果を得るには、いくつかのデコレータ(Form、dtなど)を削除する必要があります。

<input type="text" name="phone[1]" value="" />
<input type="text" name="address[2]" value="" />

$form->getValues()次に、結果とともに値を取得すると、次のようになります。

Array(
   'phone' = Array(
       '1' => <value>,
   ),
   'address' = Array(
       '1' => <value>,
   )
);
于 2012-09-25T20:41:54.450 に答える
0

なぜこの特別なケースが必要なのかわかりませんが、私の意見では、カスタムテンプレートを使用することが唯一の解決策です。

class YourForm extends Zend_Form
{
    public function init()
    {
        $this->setDecorators(array(
            array(
                'ViewScript',
                array(
                    'viewScript' => 'path/to/your/phtml/file',
                    'possibleOtherParamYouWantToPass' => 'value',
                    ...
                )
            )
        ));
    }
}

つまり、自分ですべてを宣言できるテンプレートファイルを使用したいということです。また、あなたのbanana[1]

ただし、単純な検証やその他の利点は失われます。

于 2012-09-24T10:27:27.770 に答える