2011-07-17 15 views
7

Estoy tratando de personalizar las etiquetas de formulario que se generan en los subformularios.Symfony2: personalizar etiquetas de formulario en colecciones de formularios

Quiero mostrar accesorios de fútbol que están contenidos en una semana de juego específico, como los siguientes:

 
- Fixture 1 : Manchester United (0) - (1) Arsenal 
- Fixture 2 : Chelsea (2) - (1) Liverpool 
- ... 

Mis formulario muestra todos los elementos y las puntuaciones relacionadas pero todas las etiquetas contienen los nombres de las columnas de base de datos (SCORE1, score2) Quiero poner nombres de equipo en su lugar. Así, en la actualidad muestra:

 
- Fixture 1 : score1 (0) - (1) score2 
- Fixture 2 : score1 (2) - (1) score2 
- ... 

En el controlador, que genera el formulario semana (WeekType). $ week contiene datos semanales y datos de accesorios usando $ week-> getFixtures().

Controller/DefaultController.php

$form = $this->createForm(new WeekType(), $week)->createView(); 

return array(
    'form' => $form, 
); 

Forma forma/WeekType.php

class WeekType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('fixtures', 'collection', array(
      'type' => new FixtureType(), 
     )); 
    } 
} 

el accesorio añade 2 campos. Quiero reemplazar las etiquetas predeterminadas por nombres de equipo. Sin embargo, no puedo acceder a los datos del dispositivo de esta forma. $ options es NULL. Pensé que $ options ['data'] contendría datos de accesorios ... pero estaba equivocado.

Formulario/FixtureType.php

class FixtureType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('score1', 'text', array('label' => **WHAT TO PUT HERE**)); 
     $builder->add('score2', 'text', array('label' => **WHAT TO PUT HERE**)); 
    } 
} 

que muestra todos los accesorios que utilizan este código, y funciona muy bien.

index.html.twig

{% for fixture in week.form.fixtures %} 
     {{ form_widget(fixture) }} 
    {% endfor %} 

Tal vez podría personalizar mis etiquetas directamente en index.html.twig pero ¿cómo puedo obtener datos de accesorios?

¿Alguien se encuentra con este problema y lo resuelve?

Respuesta

5

he encontrado una solución!

En la plantilla "index.html.twig", itere sobre los elementos del formulario. Fue un error. Solo tuve que iterar sobre los accesorios y obtener un widget de formulario relacionado.

index.html.ramita

{% for fixture in week.fixtures %} 
    fixture.HomeTeam.name 
    {{ form_widget(week.form.fixtures[loop.index0]) }} 
    fixture.AwayTeam.name 
{% endfor %} 

El truco es recuperar elementos de formulario directamente de forma widgets de matriz:

week.form.fixtures[loop.index0] 
Cuestiones relacionadas