0

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を持っているという事実を除いて、それはほとんど機能しています。

4

1 に答える 1

1

setNameFormatのパラメーターはかなり醜いですが、それが機能しているようです。あなたはそれに同意しますか、それともより良い解決策がありますか?

はい、Symfonyと埋め込みフォームは少し混乱します。

しかし、はい-より良い解決策があります。フォームの名前をフレームワークまでフォーマットする必要があります。

これは、embedForm()/ embedRelation()関数、埋め込みフォームの背後にあるロジック、および埋め込みフォームのレンダリングに関するfabienとryanによる優れたドキュメントです。

于 2012-04-06T12:08:26.647 に答える