Тип регистрационной формы с использованием 2 разных классов

Я создал регистрационную форму в symfony для пользователей, эти пользователи связаны с другим полем другой таблицы (города), и я хочу, чтобы для входа в систему пользователь мог выбрать свой собственный город, но я не могу получить регистрационную форму, чтобы добавить мне города который пользователь выбирает из раскрывающегося списка. Это действительно расстраивает.

Это код регистрационной формы:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('email')
        ->add('Password', PasswordType::class, [
            // instead of being set onto the object directly,
            // this is read and encoded in the controller
            'mapped' => false,
            'constraints' => [
                new NotBlank([
                    'message' => 'Please enter a password',
                ]),
                new Length([
                    'min' => 6,
                    'minMessage' => 'Your password should be at least {{ limit }} characters',
                    // max length allowed by Symfony for security reasons
                    'max' => 4096,
                ]),
            ],
        ])
        ->add('nombre')
        ->add('apellidos')
        //Falta por añadir el mensaje y la ciudad
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => User::class,
    ]);
}

А это код регистрационного контроллера

    /**
 * @Route("/register", name = "app_register")
 */
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response
{
    $user = new User();
    $form = $this->createForm(RegistrationFormType::class, $user);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        // encode the plain password
        $user->setPassword(
            $passwordEncoder->encodePassword(
                $user,
                $form->get('Password')->getData()
            )
        );
        //El usuario empezara con 0 minutos de saldo cuando se registre
        $user->setTiempo(0);

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($user);
        $entityManager->flush();

        // do anything else you need here, like send an email

        return $this->redirectToRoute('index');
    }

    return $this->render('registration/register.html.twig', [
        'registrationForm' => $form->createView(),
    ]);
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
49
1

Ответы 1

Это потому, что вы не добавили города в форму. Вы должны добавить его. Для этого у вас есть выбор...

  1. Используйте сам объект ( EntityType )
  2. Создайте пользовательский тип формы для городов

Насколько вам известно, я бы предпочел EntityType. Вот так... и подробнее о EntityType/CustomType @documentation https://symfony.com/doc/current/reference/forms/types/entity.html

$builder
        ->add('email')
        ->add('cities', EntityType::class, [
            'class' => Cities::class,
            'choice_label' => 'name',
            'choice_value' => 'id'
        ])
        ->add('Password', PasswordType::class, [
            // instead of being set onto the object directly,
            // this is read and encoded in the controller
            'mapped' => false,
            'constraints' => [
                new NotBlank([
                    'message' => 'Please enter a password',
                ]),
                new Length([
                    'min' => 6,
                    'minMessage' => 'Your password should be at least {{ limit }} characters',
                    // max length allowed by Symfony for security reasons
                    'max' => 4096,
                ]),
            ],
        ])
        ->add('nombre')
        ->add('apellidos')
        //Falta por añadir el mensaje y la ciudad
    ;

Другие вопросы по теме