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 和嵌入式表单有点令人困惑。

但是是的 - 有一个更好的解决方案,您应该让表单名称格式达到框架。

这是fabien 和 ryan 关于 embedForm()/embedRelation() 函数、嵌入式表单背后的逻辑以及渲染嵌入式表单的优秀文档。

于 2012-04-06T12:08:26.647 回答