2012-04-06 26 views
0

我正在构建一个表单,允许我使用Symfony 1.4同时编辑给定表的所有行。 为此,我使用了嵌入式表单。我的解决方案正在工作,但我想知道为什么我必须为我的嵌入式表单使用包装?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): ?> 

这几乎是除了事实上,我输入具有相同的名称和编号工作。

回答

1

我发现setNameFormat的参数退出丑陋,但它似乎是它的工作方式。你是否同意或者有更好的解决方案?

是的,Symfony和嵌入式表单有点混淆。

但是 - 有一个更好的解决方案,你应该让窗体名称格式化到框架。

这是fabien和ryan关于embedForm()/ embedRelation()函数的一个excellent docu,这是嵌入式表单的逻辑,也是关于呈现嵌入式表单的逻辑。

相关问题