2012-04-06 3 views
0

Ich erstelle ein Formular, mit dem ich alle Zeilen einer bestimmten Tabelle gleichzeitig mit Symfony 1.4 bearbeiten kann. Dazu habe ich eingebettete Formulare verwendet. Meine Lösung funktioniert, aber ich frage mich, warum ich einen Wrapper für meine eingebetteten Formulare verwenden muss?Eingebettete Formulare in Symfony 1.4: Warum muss ich einen Wrapper verwenden?

Hier ist mein Code:

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); 
    } 
} 

Ich finde, dass die Parameter des setNameFormat hässlich verlassen, aber es scheint, dass es der richtige Weg ist es funktioniert. Stimmen Sie dem zu oder gibt es eine bessere Lösung?

ich meine Form Layout manuell zu bauen und hier ist die Schleife ich verwenden, um alle meine Felder anzuzeigen:

<?php foreach ($form->getEmbeddedForm('foo_collection')->getEmbeddedForm() as $subForm): ?> 
    <?php include_partial('form', array('form' => $subForm)) ?> 
<?php endforeach; ?> 

Wieder finde ich dieses hässliche und ich verstehe immer noch nicht, warum ich kann‘ t tue das $form->getEmbeddedForm() ohne ein Wrapper-Formular zu verwenden.

Ich habe versucht, die gleiche Form, ohne die Hülle mit einer Schleife, wie dies zu tun:

<?php foreach ($form->getEmbeddedForms() as $subForm): ?> 

Es ist fast außer der Tatsache, funktioniert meine Eingaben die gleichen Namen und ID haben.

Antwort

1

Ich finde, dass der setNameFormat Parameter ist hässlich, aber es scheint, dass es so ist, wie es funktioniert. Stimmen Sie dem zu oder gibt es eine bessere Lösung?

Ja, Symfony und eingebettete Formulare sind ein wenig verwirrend.

Aber ja - es gibt eine bessere Lösung, sollten Sie das Formular Name Format bis zum Framework.

Hier ist ein excellent docu von Fabien und Ryan über die Funktionen embedForm()/embedRelation(), die Logik hinter der eingebetteten Form und auch über das Rendern eingebetteter Formulare.