Если вы используете статический массив выбора, Traits, вероятно, является лучшим вариантом.
Но если вы получаете ваш выбор массива из базы данных или другого источника в другом месте, чем в самом кодеи, если этот массив может меняться в зависимости от контекста, вы должны использовать функцию configureOptions
вашего FormType:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MyFormType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', ChoiceType::class, [
'choices' => $options['allowed_titles'], //use "allowed_titles" option defined below
'label' => 'label.title',
'placeholder' => 'label.choose_in_list' //(if you want to add a NULL value default choice (invalid choice when submitting))
])
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'allowed_titles' => [], //define "allowed_titles" option and its default value
]);
}
//...
}
И в вашем контроллере инициализируйте вашу форму с вашим массивом выбора в опциях:
$form = $this->createForm(MyFormType::class, $entity, [
'allowed_titles' => $allowedTitles
]);