我正在构建一个表单,允许我使用 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 之外,它几乎可以正常工作。