Symfony2: настроить метки форм в коллекциях форм

Я пытаюсь настроить метки форм, которые создаются в подчиненных формах.

Я хочу отобразить футбольные матчи, которые содержатся в определенной игровой неделе, например:

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

В моей форме отображаются все приборы и связанные с ними оценки, но все метки содержат имена столбцов базы данных (score1, score2). Вместо этого я хочу поставить названия команд. Итак, в настоящее время он показывает:

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

В контроллере я генерирую форму недели (WeekType). $week содержит данные за неделю и данные приборов, используя $week->getFixtures().

Контроллер/DefaultController.php

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

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

Форма/WeekType.php

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

Форма Fixture добавляет 2 поля. Я хочу заменить метки по умолчанию на названия команд. Однако я не могу получить доступ к данным прибора в этой форме. $options имеет значение NULL. Я думал, что $options['data'] будет содержать данные приборов... но я ошибался.

Форма/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**));
    }
}

Я отображаю все приборы, используя этот код, и он прекрасно работает.

index.html.twig

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

Возможно, я мог бы настроить свои метки непосредственно в index.html.twig, но как я могу получить данные о приборах?

Кто-нибудь сталкивался с этой проблемой и решал ее?


person ocornu    schedule 17.07.2011    source источник


Ответы (2)


Я нашел решение!

В шаблоне index.html.twig я перебирал элементы формы. Это была ошибка. Мне просто нужно было перебрать фикстуры и получить соответствующий виджет формы.

index.html.twig

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

Хитрость заключается в извлечении элементов формы непосредственно из массива виджетов формы:

    week.form.fixtures[loop.index0]
person ocornu    schedule 23.07.2011

http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand

использовать

{{ form_label(fixture) }}  <-  {{ team.name }}
{{ form_errors(fixture) }}
{{ form_widget(fixture) }}

вместо

{{ form_widget(fixture) }}
person ejosvp    schedule 21.07.2011