Php Symfony2设置类型时表单字段的验证

Php Symfony2设置类型时表单字段的验证,php,forms,validation,symfony,Php,Forms,Validation,Symfony,我使用注释对类成员变量设置了约束: /* @Assert\Length(min="3") */ protected $password; 当我添加与此变量对应的字段而不指定其类型时,此约束将添加到表单类中构建的表单: $builder->add('password'); 该类型被猜测为“文本”。 但是,我希望此字段的输入类型为“password”。 但当我这样指定此类型时: $builder->add('password', 'password'); 未添加注释中的约束 我知

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

/* @Assert\Length(min="3") */
protected $password;
当我添加与此变量对应的字段而不指定其类型时,此约束将添加到表单类中构建的表单:

$builder->add('password');
该类型被猜测为“文本”。 但是,我希望此字段的输入类型为“password”。 但当我这样指定此类型时:

 $builder->add('password', 'password');
未添加注释中的约束

我知道我可以将约束添加到form类中的字段:

$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
        ));     
}
数据将使用类中定义的约束进行验证