Symfony2: настраивайте метки форм в коллекциях форм - PullRequest
7 голосов
/ 18 июля 2011

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

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

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

Моя форма отображает все приборы и соответствующие оценки, но все метки содержат имена столбцов базы данных (оценка1, оценка2). Я хочу поставить названия команд вместо. Итак, в настоящее время он показывает:

- 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, но как я могу получить данные о приборах?

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

Ответы [ 2 ]

5 голосов
/ 23 июля 2011

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

В шаблоне "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]
0 голосов
/ 22 июля 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) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...