2016-10-26 2 views
2

Я хочу показать отношение ManyToMany в сущности как список флажков в форме вместо выбора с множественным выбором.Symfony forms, показать отношение ManyToMany как список флажков вместо select

В моей сущности я это:

/** 
* @var ArrayCollection 
* 
* @ORM\ManyToMany(targetEntity="Language") 
* @ORM\JoinTable(name="courses_languages", 
*  joinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="language_id", referencedColumnName="id")} 
*  ) 
*/ 
private $languages = []; 

И в моем FormType для этого лица у меня есть это:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('languages', ChoiceType::class, [ 
      'multiple' => true, 
      'expanded' => true 
     ]) 
    ; 
} 

Но при установке многообразны и расширена правда, я получаю эту ошибку:

Unable to transform value for property path "languages": Expected an array. 

Я исследовал и находится в Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToValuesTransfomer в функциональном преобразовании

public function transform($array) 
{ 
    if (null === $array) { 
     return array(); 
    } 

    if (!is_array($array)) { 
     throw new TransformationFailedException('Expected an array.'); 
    } 

    return $this->choiceList->getValuesForChoices($array); 
} 

Тип массива - Doctrine\ORM\PersistentCollection, поэтому он не работает при проверке is_array.

Как я могу это исправить? Спасибо

ответ

1

Изменения ChoiceType по EntityType (установке class варианта) или просто оставить его null, доктрина может угадать тип (EntityType в данном случае) от вашей отображенной собственности:

$builder 
    ->add('languages', null, [ 
     'multiple' => true, 
     'expanded' => true 
    ]); 

В двух словах , проблема заключается в том, что ChoiceType предназначен для работы с array элементов, в то время как EntityType с array и Doctrine\Common\Collections\Collection.

+1

Спасибо! что сработало :) –

Смежные вопросы