Я использую симфони 2.3. Я хочу создать форму, в которой пользователь может выбрать все языки, на которых он говорит (поле выбора с языками должно повторяться с помощью javascript, но здесь это не проблема). Я рад, если в полях выбора отображаются правильные варианты.
У меня есть объекты "Профиль" и "Языки" с однонаправленным отношением ManyToMany от профиля:иностранные_языки к языкам. Сгенерированная таблица profile_has_languages выглядит нормально. Я ввел некоторые тестовые данные прямо в него.
Я создал ProfileType, и с помощью $builder->add('foreign_languages') он показывает мне одно поле выбора с выбранными правильными языками. Все идет нормально...
Теперь каждый выбранный язык должен быть в своем собственном поле выбора. Я знаю, что мне нужна коллекция:
$builder->add('foreign_languages', 'collection', array('type'=>new LanguageType()));
Это мой LanguageType:
class LanguageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name','entity',array(
'class'=>'Test\TestBundle\Entity\Languages',
'property' => "name",
'multiple' => false,
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('s')->orderBy('s.name', 'asc');
},
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Test\TestBundle\Entity\Languages'));
}
public function getName()
{
return 'language';
}
}
Это дает мне 3 поля выбора со всеми доступными языками (по одному для каждого языка, выбранного пользователем). Это нормально, но все языки не выбраны. Как мне теперь предварительно выбрать правильные языки?
Должен ли я где-то использовать цикл? Или должна быть связь между Языками и Профилем (как это будет выглядеть?)
Я был бы очень признателен за вашу помощь - я застрял с этим с 2 дней... :(
Обновление: я знаю, как это работает с редактируемым текстовым полем, из этого примера: http://symfony.com/doc/2.3/cookbook/form/form_collections.html. Чтобы упростить мой вопрос: какая разница, если я хочу показать объект как выбор в моей коллекции (выбираемый, но не редактируемый)?
Я нашел рабочее решение с преобразователем данных здесь: Symfony 2 Коллекция встроенных форм Многие ко многим
Это рекомендуемый способ?