Передать массив данных в форму - PullRequest
0 голосов
/ 08 ноября 2019

Я использую Symfony, и мне нужно передать два массива, чтобы я мог сделать список выбора.

На данный момент в конструкторе форм у меня есть это:

    ->add('city', EntityType::class, [
        'label' => 'Select city',
        'class' => Cities::class,
        'choice_label' => 'title',
        'choice_value' => 'title'
    ])

Это бросает менявсе cities в списке. Я хочу отфильтровать их. Я выполнил фильтрацию на моем контроллере следующим образом:

    $capitals = $cityRepository->findBy(['cityType' => CityType::capital()->id()]);
    $villages = $cityRepository->findBy(['villageType' => CityType::village()->id()]);

это возвращает мне два массива: capitals и villages.

Как я могу передать их в форму?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вам необходимо передать массивы в опцию choices.

https://symfony.com/doc/current/reference/forms/types/entity.html#using-choices

    ->add('city', EntityType::class, [
        'label' => 'Select city',
        'class' => Cities::class,
        'choice_label' => 'title',
        'choice_value' => 'title',
        'choices' => $choices // ------------> This line
    ])

$choices = array_merge($capitals, $villages);

0 голосов
/ 08 ноября 2019

В вашем контроллере:

$form=$this->createForm(YourFormType::class, $yourEntity, array(
    'capitals'=>$capitals,
    'villages'=>$villages
));

В вашей форме:

public function buildForm(FormBuilderInterface $builder, array $options) {
    /** @var array $capitals */
    $capitals=$options['capitals'];
    /** @var array $villages */
    $villages=$options['villages'];

    $builder->add('city', EntityType::class, array(...)
            ->add('vallacap', ChoiceType::class, array(
                'mapped'=>false, //Make sure it's not mapped to any entity
                'choices'=>array(
                    'Capitals'=>$capitals,
                    'Villages'=>$villages
                ),
                'required'=>false,
            ));
}

public function configureOptions(OptionsResolver $resolver) {
    $resolver->setDefaults(array(
        'data_class'=>Personnalisation::class,
        'capitals'=>null, // Set default to null in case argument is not passed
        'villages'=>null,
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...