为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 用户注册表验证错误

Symfony 用户注册表验证错误

PHP
慕斯709654 2021-10-15 15:45:38
我已经按照 Symfony文档开发了一个基本的用户注册表。尝试提交密码和失败登录计数不能为空的表单时,我收到验证错误:data.password       This value should not be nulldata.failedLogins   This value should not be nullRegistrationFormType 类:public function buildForm(FormBuilderInterface $builder, array $options){    $builder        ->add('firstname', TextType::class, ['label'=> false, 'attr' => ['placeholder' => 'First name']])        ->add('lastname', TextType::class, ['label'=> false, 'attr' => ['placeholder' => 'Last name']])        ->add('email', EmailType::class, ['label'=> 'Email address', 'attr' => ['placeholder' => 'Email address']])        ->add('plainPassword', PasswordType::class, [            'label' => 'Password',            'attr' => ['placeholder' => 'Must be at least 6 characters'],            'mapped' => false,            'constraints' => [                new NotBlank([                    'message' => 'Please enter a password',                ]),                new Length([                    'min' => 6,                    'minMessage' => 'Your password should be at least {{ limit }} characters',                    // max length allowed by Symfony for security reasons                    'max' => 4096,                ]),            ],        ])    ;}public function configureOptions(OptionsResolver $resolver){    $resolver->setDefaults([        'data_class' => User::class,    ]);}用户实体:/*** @var string The hashed password* @ORM\Column(name="password", type="string", length=255, nullable=false, options={"fixed"=true})*/private $password;/** * @var int * * @ORM\Column(name="failed_logins", type="integer", nullable=false) */private $failedLogins;问题似乎是表单验证器返回 false,因为它需要 'password' 和 'failedLogins' 字段。如代码示例所示,我不想在表单中包含这些字段并在提交表单后处理它们...如果我向表单构建器添加虚拟隐藏字段,则表单处理正常:->add('password', HiddenType::class, ['data' => 'abc'])->add('failedLogins', HiddenType::class, ['data' => 0])然而,这似乎不是正确的方法。任何有关为什么在表单生成器中未包含这些字段时会验证这些字段的见解将非常感谢。
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我相信您有两个不同的问题,因为验证是针对与表单相关的实体完成的。

从表单验证文档:

Symfony,验证应用于底层对象(例如任务)。换句话说,问题不在于“表单”是否有效,而是在表单将提交的数据应用到它之后 $task 对象是否有效。调用 $form->isValid() 是询问 $task 对象是否有有效数据的快捷方式。


  1. 您的密码password在 entity 中命名User,但plainPassword在表单中。验证函数不会plainPassword在实体中找到属性并返回data.password This data should not be null。因此,您只需将表单字段名称更改为password

  2. failedLogins的实体中有 a ,但它不存在于表单中。默认情况下,表单验证会检查所有实体的属性。正如failedLogins声明的那样nullable=false,验证将返回data.failedLogins This data should not be null。在这种情况下,您需要验证组,允许您选择User将在表单验证中考虑的属性。


查看完整回答
反对 回复 2021-10-15
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信