Symfony 1.4を使用して、特定のテーブルのすべての行を同時に編集できるフォームを作成しています。そのために、埋め込みフォームを使用しました。私のソリューションは機能していますが、埋め込みフォームにラッパーを使用する必要があるのはなぜですか?
これが私のコードです:
class FooCollectionForm extends BaseForm
{
public function configure()
{
$wrapperForm = new sfForm();
foreach ($this->getOption('bar') as $bar)
{
$form = new myForm();
$form->widgetSchema->setNameFormat('foo_collection['.$bar['label'] . '][%s]');
$wrapperForm->embedForm($bar['label'], $form);
}
$this->embedForm('foo_collection', $wrapperForm);
}
}
setNameFormatのパラメーターはかなり醜いですが、それが機能しているようです。あなたはそれに同意しますか、それともより良い解決策がありますか?
フォームのレイアウトを手動で作成しています。すべてのフィールドを表示するために使用する必要のあるループは次のとおりです。
<?php foreach ($form->getEmbeddedForm('foo_collection')->getEmbeddedForm() as $subForm): ?>
<?php include_partial('form', array('form' => $subForm)) ?>
<?php endforeach; ?>
$form->getEmbeddedForm()
繰り返しますが、これは醜いのですが、ラッパーフォームを使用せずにそれができない理由がまだわかりません。
私は次のようなループでラッパーなしで同じフォームを実行しようとしました:
<?php foreach ($form->getEmbeddedForms() as $subForm): ?>
私の入力が同じ名前とIDを持っているという事実を除いて、それはほとんど機能しています。