Как использовать «selected» в опции с локалью пользователя в функции buildForm? - PullRequest
0 голосов
/ 24 сентября 2019

Я хотел бы сделать форму с «выбранным» в опции, чтобы выбрать язык.По умолчанию я хотел бы «выбрать» параметр локали пользователя.

(...)
use Symfony\Component\HttpFoundation\Request;
(...)


class VisitType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options, Request $request)
        {

            $locale = $request->getLocale();
            if ($locale == 'fr'){
                $prefLang = "Français";
            }elseif ($locale == 'nl'){
                $prefLang = "Nederlands";
            }elseif ($locale == 'en') {
                 $prefLang = "English";
            }

            $builder->add('langvis', ChoiceType::class, [
                    'label' => 'form.input.langvis',
                    'choices' => [
                        'Français' => 'Français',
                        'Nederlands' => 'Nederlands',
                        'English' => 'English'
                    ],
                    'preferred_choices' => [$prefLang]
                ])
                ->add('save', SubmitType::class, [
                    'label' => 'form.input.send',
                    'attr' => [
                        'class' => 'btn btn-primary form-control'
                    ]
                ])
                ->getForm();
                     ;
        }
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Visit::class
        ]);
    }
}

Но у меня есть ошибка компиляции:

Объявление App \ Form \ VisitType :: buildForm (Symfony \ Component \ Form \ FormBuilderInterface $ builder, параметры $ array, Symfony \ Component \ HttpFoundation \ Request $ request) должен быть совместим с Symfony \ Component \ Form \ AbstractType :: buildForm (Symfony \ Component \ Form \ FormBuilderInterface $ builder, массив$ options)

Как я могу это сделать?

1 Ответ

0 голосов
/ 24 сентября 2019

вы не можете передать запрос на buildForm, попробуйте использовать OptionsResolver

class VisitType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) {

        $locale = $options["locale"];
        if ($locale == 'fr') {
            $prefLang = "Français";
        } elseif ($locale == 'nl') {
            $prefLang = "Nederlands";
        } elseif ($locale == 'en') {
            $prefLang = "English";
        }

        $builder->add('langvis', ChoiceType::class, [
                    'label' => 'form.input.langvis',
                    'choices' => [
                        'Français' => 'Français',
                        'Nederlands' => 'Nederlands',
                        'English' => 'English'
                    ],
                    'preferred_choices' => [$prefLang]
                ])
                ->add('save', SubmitType::class, [
                    'label' => 'form.input.send',
                    'attr' => [
                        'class' => 'btn btn-primary form-control'
                    ]
                ])
                ->getForm();
    }

    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults([
            'data_class' => Visit::class,
            'locale' => 'Français'
        ]);
    }

В контроллере при создании параметра языкового стандарта передачи формы:

$locale = $request->getLocale();
$formType = 'VisitType';
$entity = 'VisitEntity';
$form = $this->createForm($formType, $entity, array('locale' => $locale));
...