Ошибка Symfony 4.3 в форме, сделанная make:registration-form

После создания регистрационной формы следующим образом: https://symfony.com/doc/current/doctrine/registration_form.html Возникла проблема с созданием учетной записи. В предыдущей версии я делал так же, и никаких проблем не было. Я не уверен, что это ошибка или я делаю что-то не так. Форма по-прежнему недействительна. В Profiler->Validation я вижу вызов: data.password Это значение не должно быть нулевым.

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

Удалено из RegistrationFormType.php:

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

Изменено в RegistrationController.php:

public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, GuardAuthenticatorHandler $guardHandler, AppAuthenticator $authenticator): Response
{
    $user = new User();
    $form = $this->createForm(RegistrationFormType::class);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $user->setEmail($form->get('email')->getData());
        $user->setPassword(
            $passwordEncoder->encodePassword(
                $user,
                $form->get('plainPassword')->getData()
            )
        );

Можете ли вы помочь мне с правильным решением этой проблемы?


person k1000    schedule 15.06.2019    source источник
comment
Установка nullable=true для поля пароля в сущности пользователя также работает, если делать это так же, как в документации.   -  person k1000    schedule 15.06.2019


Ответы (1)


Ошибка регистровой формы Symfony4

Замените все слова: plainPassword на password в классах и ветках:

src/Form/RegistrationFormType.php
templates/register/register.html.twig
src/ControllerRegistrationController.php

И измените на true или удалите из (src/Form/RegistrationFormType.php):

'mapped' => true,
// or hide
// 'mapped' => false,

Или добавьте переменную plainPassword в src/Entity/User.php и сделайте

# Update User class add plainPassword
php bin/console make:entity
> User
...

# in sqlite3
php bin/console doctrine:schema:update --force

# or in mysql
php bin/console make:migration
php bin/console doctrine:migrations:migrate

P.s. php bin/console make:user не создает plainPassword (метод и переменная), но создает форму регистрации и шаблон имеет переменную «plainPassword» (глупая документация Symfony).

С уважением Лайк

person Laick    schedule 16.06.2019
comment
Он тоже может работать, но все же это не ответ, почему он просто не работает с каким-либо ингредиентом. Поле PlainPassword не отображается, и я не понимаю, почему форма недействительна на этом уровне с пустым значением пароля объекта пользователя. - person k1000; 18.06.2019