Symfony 4 - ключ "_username" должен быть строкой с "NULL" - PullRequest
1 голос
/ 21 октября 2019

мой проект Symfony 4 У меня есть функция, которая служит мне для аутентификации, но также и для регистрации:

/**
     * Login
     *
     * @Route("/login", name="account_login")
     * 
     * @return Response
     */
    public function login2(AuthenticationUtils $utils, Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder)
    {
        // Connexion
        $error = $utils->getLastAuthenticationError();
        $username = $utils->getLastUsername();

        // Inscription
        $user = new User();
        $form = $this->createForm(RegistrationType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $password = $encoder->encodePassword($user, $user->getPassword());
            $user->setHash($password);
            $manager->persist($user);
            $manager->flush();

            $this->addFlash(
                'success',
                'Votre compte a bien été créé ! Vous pouvez maintenant vous connecter'
            );

            $this->redirectToRoute('account_login');
        }


        return $this->render('security/login.html.twig', [
            'hasError' => $error !== null,
            'username' => $username,
            'form' => $form->createView(),
        ]);
    }

Итак, в моем файле ветки есть форма для входа:

<form id="login-form" action="{{path('account_login')}}" method="post" role="form" style="display: block;">
     <div class="form-group">
          <label for="username">Email</label>
          <input type="text" name="_username" id="username" tabindex="1" class="form-control" placeholder="Adresse email" required value={{username}}>
     </div>
     <div class="form-group">
         <label for="password">Mot de passe</label>
         <input type="password" name="_password" id="password" tabindex="2" class="form-control" placeholder="Mot de passe">
     </div>
</form>

И моя регистрационная форма:

{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}

Но когда я отправляю свою регистрационную форму, у меня появляется эта ошибка:

Ключ "_username" должен быть строкой, "NULL"дано.

В моем security.yml я нашел:

form_login:
        login_path: account_login
        check_path: account_login
        default_target_path: absence_index

      logout:
        path: account_logout
        target: account_login

Я нашел этот пост: Ключ "_username" должен быть строкой, "NULL"учитывая symfony 4

Это та же проблема, я думаю, но я не понимаю, в чем решение.

1 Ответ

1 голос
/ 21 октября 2019

смешивать логин и регистрацию на один маршрут странно ... и я совершенно уверен, что это не сработает (без особых хлопот), потому что фреймворк уже обрабатывает запрос. (как в: у него есть некоторая «форма», которая обрабатывает запрос и выдает ошибки)

Однако вам не нужно ставить его на один маршрут ... просто установите action при регистрациии войдите в форму для соответствующего маршрута и используйте те же шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...