【发布时间】:2015-07-27 23:54:06
【问题描述】:
我在理解 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,但我希望有更优雅的方式。
我错了吗?
【问题讨论】:
标签: php forms symfony data-transfer-objects