我在理解Symfony的DataTransformers中如何准确处理数据时遇到了麻烦。
我只有一个密码表格。只有一个领域。该字段属于必须在.yml
文件中定义的约束的用户实体。
Software\Bundle\Entity\User:
password:
- NotBlank: ~
- Length:
min: 6
max: 155
正如预期的那样,验证工作正常。当密码必须从字段中自动编码时,就会出现问题。所以,
$builder->add('password', 'password', [
'label' => 'word.password'
]);
$builder->get('password')
->addModelTransformer(new EncodePasswordTransformer());
还有变压器本身:
class EncodePasswordTransformer implements DataTransformerInterface
{
public function transform($value)
{
return $value;
}
public function reverseTransform($value)
{
// encode password
return PasswordHash::createHash($value);
}
}
这就是正在发生的事情:
该表单应包含 6 到 155 个字符,但$form->isValid()
始终为真,因为PasswordHash::createHash($value)
将密码编码为 32 个字符。我所期待的是:
表单验证原始密码,如果超过 6 个字符则变为$form->isValid()
true,然后在验证后对密码进行编码。
我知道我可以在表单有效时手动编码密码而不使用DataTransformer
,但我希望有一种更优雅的方式。
我错了吗?