Zend_Formには、この名前の機能がありますsetElementsBelongTo
。http://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>,
)
);