Я создаю форму в Symfony, используя ManyToMany, вот так:
Faq entity
/**
* @ORM\ManyToMany(
* targetEntity = "XXX\AppBundle\Entity\LegalAndHelp\FaqGroups",
* inversedBy = "faq"
* )
* @ORM\JoinTable(
* name = "faq_groups_faq",
* joinColumns = {@ORM\JoinColumn(name = "faq_id", referencedColumnName = "id", onDelete = "CASCADE")},
* inverseJoinColumns = {@ORM\JoinColumn(name = "faq_group_id", referencedColumnName = "id", onDelete = "CASCADE")}
* )
*/
protected $faqGroups;
FaqGroups entity
/**
* @ORM\ManyToMany(
* targetEntity = "XXX\AppBundle\Entity\LegalAndHelp\Faq",
* mappedBy = "faqGroups",
* cascade = {"persist"}
* )
*/
protected $faq;
Затем я строю такую форму:
$builder
->add('faqGroups', EntityType::class, [
'class' => FaqGroups::class,
'choice_label' => function ($faqGroups) {
return $faqGroups->getDisplayTitle($this->userLanguage);
},
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('fg');
},
'placeholder' => 'admin.faq.choose.group',
'constraints' => [
new Count([
'min' => 1,
'minMessage' => 'blabla'
])
]
])
Теперь (находясь в части редактирования) у меня есть заполненный объект в форме, и я должен видеть все данные, включая <select> с уже выбранным заданным значением. Проблема в том, что когда есть выбор, он не отображает установленное значение. Когда я изменяю это и добавляю 'multiple' => true, 'expanded' => false,, тогда выбор в порядке. Но я хочу видеть это как раскрывающийся список выбора, а не вариант множественного выбора или флажка.
Ага. это то, что я подумал ... имеет смысл ... спасибо.




Если у вас есть отношения ManyToMany, вам не следует использовать multiple => true? Я бы посмотрел на установщик геттера, функции удаления хассера (они используются вашей сущностью формы), если ваш геттер возвращает массив значений, а ваше поле выбора ожидает одно значение, это может быть проблематичным. Вы улавливаете мою мысль здесь? Я бы добавил преобразователь данных в поле выбора и преобразовал из массива в первое значение строки) и обратно из строки в массив из 1 значения. Надеюсь это поможет