设置类型时对表单字段进行Symfony2验证


Symfony2 validation of form field when type is set

我使用注释对类成员变量设置了约束:

/* @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
        ));     
}

数据将使用类中定义的约束进行验证