php - 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
解决方案
User
您的实体似乎有一个方法setPassword(string $password)
,只有string
参数的类型提示。在提交表单时,symfony 通过调用 setter 方法填充一个实体,它发生在验证之前。
在您的情况下,可能会在提交表单时引发错误,$form->handleRequest($request)
因为在调用该$password
方法时null
setPassword(string $password)
您应该将null
类型添加到setPassword(?string $password)
推荐阅读
- recursion - 给定树递归问题的时间复杂度
- javascript - 努力将 onclick 转换为 onmouseover
- .htaccess - 匹配 htaccess 中的控制器操作
- python - 将参数传递给 Pool 使用的函数
- javascript - 在 Redux mapDispatchToProps 和 SweetAlert2 中使用扩展运算符
- c - 如何将结构的副本修复为结构数组段错误
- python - 如果在 Django 模型 Meta 中未指定排序会发生什么
- python - 如果 AddField 引用“相同”列,则带有“--fake-initial”的 Django 迁移不起作用
- android - 每当我尝试添加此内容时,我都会遇到错误
- node.js - NodeJS - 如何安全地存储数据库的 ip、用户名和密码?