Symfony2 - default-Werte im Formular-Sammlung Prototyp

Ich versuche, die Sammlung Prototyp, eine Reihe von default-Werten anstelle von leeren Werten. Im Idealfall würde ich mag in der Lage sein zu definieren, die diesen Standard irgendwo, entweder in der model-Klasse oder der form-definition-Klasse, aber ich kann nicht einen Weg finden, dies zu tun, überall.

Als Beispiel:

Habe ich eine AbstractType für meine form, die enthält eine geschachtelte Kollektion von Person Zeilen relevanten code siehe unten):

public function buildForm(FormBuilder $builder, array $options)
{
    ...
    $builder->add('people', 'collection', array(
            'type'         => new PersonType(),
            'allow_add'    => true,
            'allow_delete' => true,
            'prototype'    => true,
        ));
    ...
}

Den PersonType-Klasse enthält den folgenden code:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('name', 'text');
    $builder->add('date_of_birth', 'date');
    $builder->add('age', 'number');

    //This would be great if I could do this but I can't:
    //$builder->add('date_of_birth', 'date', array('empty_value' => new \DateTime(...))); //some default value defined here
}

Die besten, die ich habe in der Lage zu kommen mit so weit unten in der Datei anzeigen (der code wird verwendet, um das Rendern der Sammlung Prototyp):

...
<tr>
    <td> {{ form_widget(person.name) }} </td>

    {# THIS DOES NOT WORK (I just get the default selected date) #}
    <td> {{ form_widget(person.date_of_birth, {'value': person.date_of_birth.get('value')|default({'year':2010, 'month':10, 'day':15})} }} </td>

    {# THIS WORKS (the field contains '0' instead of being empty) #}
    <td> {{ form_widget(person.age, {'value': person.age.get('value')|default(0)} }} </td>
</tr>
...
  • Es scheint nur zu funktionieren mit einfachen Typen wie text und Zahl. Es funktioniert nicht mit dem Datum geben.
  • Sowieso nicht das Gefühl, der richtige Ansatz. Ich sollte in der Lage sein, zu definieren, eine Standard-oder leeren Wert entweder in das zugrunde liegende Modell (z.B. protected $age = 10; innerhalb der Modell-Klasse), oder sonst in der form-definition (AbstractType) Klasse (z.B. array('empty_value' => new DateTime()), aber weder sind derzeit möglich.

So in der Zusammenfassung, meine Frage ist:

Wie kann ich festlegen, die Standardwerte für eine model-Klasse, die wird automatisch eingestellt, auf dem client beim hinzufügen von neuen Elementen zu einem Formular 'Sammlung' (statt einfach nur Leerzeichen).

Kennt jemand eine gute Möglichkeit, dies zu tun?

  • $builder->add('items', CollectionType::class, array( 'entry_type' => ItemType::class, 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'prototype_data' => new ItemData(), ))
InformationsquelleAutor agentar | 2011-09-21
Schreibe einen Kommentar