Symfony2: настройка идентификаторов элементов формы в коллекциях форм - PullRequest
5 голосов
/ 07 августа 2011

При использовании коллекций форм идентификаторы элементов формы автоматически создаются sf2

Форма / WeekType.php

class WeekType extends AbstractType
{
    public function getName()
    {
        return "MyBundle";
    }

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

Форма / FixtureType.php

class FixtureType extends AbstractType
{  
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('score1', 'text');
    }
}

Этот код создает следующие элементы формы:

<select id="MyBundle_fixtures_0_score1" />
<select id="MyBundle_fixtures_1_score1" />

0, 1 ... только текущий индекс итерации.

Я хочу изменить идентификаторы выбранных тегов. Например, поместив значения первичного ключа (из модели) вместо индекса итерации.

<select id="MyBundle_fixtures_151_score1" />
<select id="MyBundle_fixtures_152_score1" />

или даже:

<select id="MyBundle_fixtures_0_score1_151" />
<select id="MyBundle_fixtures_1_score1_152" />

151, 152 - значение первичного ключа из таблицы Fixture (из базы данных).

Ответы [ 2 ]

1 голос
/ 06 ноября 2014

Вы можете добавить аннотацию " indexBy " для столбца отношений OneToMany (фикстуры) в своем классе сущности или использовать ключевое слово INDEX BY в DQL:

/**
 * @ORM\OneToMany(targetEntity="Entity", mappedBy="ref", indexBy="id")
 */
private $fixtures;

http://doctrine -orm.readthedocs.org / ен / последний / учебники / рабочий-с индексированной-associations.html

0 голосов
/ 11 августа 2011

Я вижу два способа сделать это:

  • Вы можете сами изменить ключи коллекций, переданных в форму, например, создать новую коллекцию с идентификаторами вместо ключей.

  • Вы можете изменить ResizeFormListener , чтобы использовать идентификаторы вместо ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...