Symfony не проверяет сущность - PullRequest
0 голосов
/ 28 июня 2018

Symfony (3.4) не проверяет сущность, не проверяет, заняты ли уже имя пользователя или адрес электронной почты. Моя сущность расширяет базовую сущность пользователя FOS, поэтому я ничего не переопределил.

Вот мой CreateUserType.php

class CreateUserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('email', EmailType::class)
            ->add('username', TextType::class)
            ->add('plainPassword', RepeatedType::class, [
                'type' => PasswordType::class
            ])
            ->add('enabled', CheckboxType::class)
        ;

        parent::buildForm($builder, $options);
    }

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

    public function getBlockPrefix()
    {
        return "user";
    }
}

И мой контроллер:

$user = new User();

$form = $this->createForm(CreateUserType::class, $user, ['method' => 'POST']);
$form->handleRequest($request);

if($form->isSubmitted() && $form->isValid()) {
    $em->persist($user);
    $em->flush();

    $view = $this->createView(null, [], 201);
    return $this->handleView($view);
}

throw new BadRequestException($form->getErrors());

У меня ошибка mysql:

Integrity constraint violation: 1062 Duplicate entry 'any_username' for key 'UNIQ_8D93D64992FC23A8'

1 Ответ

0 голосов
/ 28 июня 2018

Этого можно избежать, добавив UniqueConstraint к вашему классу пользователя следующим образом:

use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @UniqueEntity(fields={"email"}, message="This email address is already in use")
 * @UniqueEntity(fields={"username"}, message="This username is already in use")
 */
class User extends BaseUser
{
    //...
}

Оказывается, я получаю это и в приложении, которое я создаю с теми же версиями, так что спасибо, что обнаружили это, хотя и не проверяли это: -)

...