2015-01-13 6 views
8

Wie kann ich in Symfony 2.6 ein individuelles Feld (single radio/checkbox Eingabefeld) in Twig rendern?Symfony 2.6 - render individuelles Wahlfeld (Radio, Checkbox) nach Name

Sagen wir, ich habe eine einfache Form:

class TransportType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
      $builder->add('transport', 'choice', array(
       'choices' => array(
        'road' => 'Car/bus', 
        'train' => 'Train', 
       ), 
       'expanded' => true, 
       'multiple' => false 
      )); 
    } 

In früheren Symfony2 Versionen konnte ich nur verwenden:

{{ form_widget(form.transport.road) }} 
{{ form_widget(form.transport.train) }} 

einzelnen Radiobuttons zu machen, aber es scheint nicht mehr zu funktionieren . Ich weiß, ich kann verwenden:

{{ form_widget(form.transport[0]) }} 
{{ form_widget(form.transport[1]) }} 

aber es ist weniger flexibel. Natürlich kann ich über die Sammlung iterieren und nach Namen suchen, aber das scheint unnötiger Aufwand zu sein. Gibt es keinen einfacheren Weg?

Ich versuchte offsetGet (die return a child by name soll), aber es funktioniert auch nur mit Array-Index.

Antwort

0

Es scheint, dass dies mit den neuesten Versionen von Symfony nicht möglich ist (d. H.> = 2.6). Ich erinnere mich, in früheren Versionen, wenn das Formular-Builder die choices Array angezeigt, wurde die Auswahl wie folgt zu erzeugen:

<select> 
    <option value="0">Car/Bus</option> 
    <option value="1">Train</option> 
</select> 
:

<select> 
    <option value="road">Car/Bus</option> 
    <option value="train">Train</option> 
</select> 

Dies hat sich jedoch in den letzten Versionen der folgenden geändert

Die ausgewählte Option wird dann normalisiert und Sie erhalten dann die erwartete value, die Sie in der FormType Klasse festgelegt haben. Sie können mehr über Normalisierung here lesen.

Auch wenn Sie {{ debug(form.transport) }} in Symfony> = 2.6 schreiben, können Sie das Formular/Feld-Array sehen und was Sie daraus verwenden können.

0

Seit Symfony 2.7 können Sie den Namen des Formulars über die Option choice_name festlegen.

8

Versuchen Sie folgendes:

{% for key, transportItem in form.transport.children %} 
    {{ form_widget(transportItem) }} 
{% endfor %} 
+1

Während dieser Code-Schnipsel, die Frage lösen kann, [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based- Antworten) hilft wirklich, die Qualität Ihrer Post zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – Ferrybig