Как в Symfony форму из контроллера передать значения choices для ChoiceType?

Для передачи значения choices для ChoiceType в Symfony форму из контроллера можно воспользоваться несколькими способами. Рассмотрим два наиболее распространенных подхода:

1. Установка параметра "choices" в методе "createForm" контроллера:

   $choices = ['choice1' => 'Choice 1', 'choice2' => 'Choice 2', 'choice3' => 'Choice 3'];
   
   $form = $this->createForm(MyFormType::class, null, ['choices' => $choices]);

В данном примере мы создаем переменную $choices, которая хранит массив с вариантами выбора. Затем передаем этот массив в метод "createForm" в качестве третьего аргумента. Когда Symfony будет формировать форму на основе класса MyFormType, она будет использовать переданное значение choices.

2. Использование форматера формы:

   $builder = $this->createFormBuilder();
   $choices = ['choice1' => 'Choice 1', 'choice2' => 'Choice 2', 'choice3' => 'Choice 3'];
   
   $builder->add('my_field', ChoiceType::class, [
       'choices' => $choices,
       'choice_label' => function ($choice, $key, $value) {
           return $value;
       },
    ]);
   
   $form = $builder->getForm();

В этом случае мы используем форматер формы для динамической установки значений choices. Мы используем анонимную функцию в качестве значения 'choice_label', которая принимает каждое значение выбора, его ключ и значение и возвращает значение. В результате это позволяет нам указывать достаточно сложную логику для выбора опций, включая условные операторы или запросы к базе данных.

Оба подхода рабочие и выбор между ними зависит от ваших конкретных потребностей и предпочтений.