Поймай ошибку в контроллере регистрации - PullRequest
0 голосов
/ 13 ноября 2018

Я сделал регистрационную форму согласно этому документу

Как реализовать простую регистрационную форму

Работает хорошо, но в случае ошибки ничего не возвращает и просто перезагружается.

Например.

+ Использовать уже существующее имя пользователя.

+ Неправильная проверка пароля.

Я хочу показать сообщение в этих случаях.

Как я могу поймать сообщение об ошибке ???

Кстати, как для входа в систему

Я могу уловить такую ​​ошибку в Security Controller

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="app_login")
     */
    public function login(AuthenticationUtils $authenticationUtils): Response
    {

        // get the login error here
        $this->data['error'] = $authenticationUtils->getLastAuthenticationError();

тогда я тоже хочу отловить ошибку в Registration Controller

<?php

namespace App\Controller;

use App\Form\UserType;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Service\CommonFunc;

class RegistrationController extends AbstractController
{
    /**
     * @Route("/register", name="user_registration")
     */
    public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder,CommonFunc $commonFunc)
    {

        $this->data['user'] = $this->getUser();
        // 1) build the form
        $user = new User();
        $form = $this->createForm(UserType::class, $user);
        $this->data['error'] = $authenticationUtils->getLastAuthenticationError();
        // 2) handle the submit (will only happen on POST)
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {

            // 3) Encode the password (you could also do this via Doctrine listener)
            $password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
            $user->setPassword($password);

            // 4) save the User!
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();

            // ... do any other work - like sending them an email, etc
            // maybe set a "flash" success message for the user

            return $this->redirectToRoute('index');
        }else if ($form->isSubmitted()) {  
           print $form->getErrors();exit; //nothing returns here.
        } 


        $this->data = array_merge($this->data,$commonFunc->makeMenuBar());
        $this->data['noLoginForm'] = true;
        return $this->render(
            'registration/register.html.twig',
            array('form' => $form->createView(),'data' => $this->data)
        );
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

попробуйте заменить form_row на form_widget или добавьте form_error в шаблон веточки

, подробнее см. Функция формы шаблона ветки и справочник по переменным (документы Symfony)

{# templates/registration/register.html.twig #}

{{ form_start(form) }}
    {{ form_widget(form.username) }}
    {{ form_widget(form.email) }}
    {{ form_widget(form.plainPassword.first) }}
    {{ form_widget(form.plainPassword.second) }}

    <button type="submit">Register!</button>
{{ form_end(form) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...