首页 > 解决方案 > Symfony 表单在密码为空时生成错误

问题描述

我正在构建一个密码重置表单。用户只需输入两次密码。我想检查它最少 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);我收到以下错误:

属性路径“password”中给出的“string”、“null”类型的预期参数。

我确实尝试了很多建议,比如在实体中添加'empty_data' => array()和。@Assert\NotBlank

标签: phpsymfonysymfony-forms

解决方案


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

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

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


推荐阅读