当密码为空时,Symfony 表单生成错误

Symfony form generated an error when password is empty

我正在构建密码重设表单。用户只需输入密码两次。我想检查它至少有 8 个字符长且不为空,并且两个密码都相同。

我使用以下表单类型设置:

$builder
->add('password', RepeatedType::class, array(
    'type' => PasswordType::class,
    'translation_domain' => 'validators',
    'invalid_message' => 'password_must_match',
    'required' => true,
    'constraints' => array(
        new NotBlank(),
        new Length(array('min' => 8)),
    )
 ))
->add('save', SubmitType::class);

密码必须匹配,最少 8 个字符的检查有效。仅当将密码留空时,在第 $form->handleRequest($request) 行的控制器中;我收到以下错误:

Expected argument of type "string", "null" given at property path "password".

我已经尝试了很多建议,例如在实体中添加 'empty_data' => array()@Assert\NotBlank

您的 User 实体似乎有一个方法 setPassword(string $password),参数只有 string 类型提示。 在提交表单时,symfony 通过调用 setter 方法填充一个实体,它发生在验证之前。

在您的情况下,表单提交 $form->handleRequest($request) 可能会引发错误,因为在 $password 中调用 setPassword(string $password) 方法时 null

您应该将 null 类型添加到 setPassword(?string $password)