我使用注释对类成员变量设置了约束:
/* @Assert'Length(min="3") */
protected $password;
当我添加与此变量对应的字段而不指定其类型时,此约束将添加到在表单类中构建的表单中:
$builder->add('password');
类型被猜测为"text"。但是,我希望这个字段的输入类型是"password"。但是当我像这样指定这个类型时:
$builder->add('password', 'password');
未添加注释中的约束。
我知道我可以在表单类的字段中添加约束:
$builder->add('password', 'password',
array('constraints' => new Assert'Length(array('min' => 3))))
或者我可以使用JavaScript将字段的输入类型从文本更改为密码。
但是,我觉得我应该能够将带注释的约束注入表单,同时还指定字段的类型。我想这一定是一个普遍的问题。我错过了什么?
您不需要在表单类型中设置约束来验证您的类。首先检查你的注释,它必须以双"*"开头
要生成表单,您应该在表单类型中添加带有'data_class'属性的方法'setDefaultOptions':
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'XXX'YourBundle'Entity'YourEntity',
'id' => null
));
}
数据将使用类中定义的约束进行验证