【问题标题】:Symfony does not validate entitySymfony 不验证实体
【发布时间】:2018-12-07 04:23:43
【问题描述】:

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 - symfony、2 - fos 用户包和 3 - php 的版本
  • Symfony 3.4、FOSUserBundle 2.0、PHP 7.2
  • 请提供您的用户实体类

标签: symfony fosuserbundle symfony-validator


【解决方案1】:

可以通过向您的用户类添加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
{
    //...
}

事实证明,我在使用相同版本构建的应用程序上也遇到了这种情况,所以感谢您发现它,从来没有测试过 :-)

【讨论】:

  • 谢谢,它可以工作,但在我看来,在早期版本的 symfony 中,不需要使用 UniqueConstraint,不是吗?
  • 我真的想不起来了!这只是我一直认为会被覆盖但从未测试过的东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多