Symfony实体注释:约束vs字段类型


Symfony entity annotations: constraints vs field types

Symfony文档列出了一些在呈现表单时可以使用的字段类型。但是,文档还指定了可用于表单验证的约束。这两个概念可以结合起来,使我的实体注释将导致Symfony使用正确的表单字段类型,而不是只是猜测?

例如,我有一个带有密码字段的User实体,它具有以下注释:

/**
 * @ORM'Column(type="string", length=64)
 * @Assert'Type("password")
 */
private $password;

然后使用FormBuilderInterface来渲染字段:

$builder
  ->add('password')

如您所见,我没有传递任何额外的选项。Symfony将其呈现为文本字段,并且似乎完全忽略了密码注释。

如何让Symfony将其显示为密码字段?我必须通过额外的选项使用FormBuilderInterface像这样吗?

$builder
  ->add('password', 'password')

还有其他方法吗?在我的User实体中使用注释似乎是提示表单字段类型的完美地方,但是Symfony在呈现字段时似乎没有考虑到它们。

实体断言注解得到解析时,你调用isValid()而不是当你建立他们的表单,表单将只采取ORM注解(你的字符串字段类型)。在表单生成器中添加可选字段类型可能是最好的方法,我还没有找到更好的方法。

正如@Alan指出的那样,在实体文件中定义视图组件(html输入)在任何情况下都没有多大意义。它的最佳位置是实体的类型文件,特别是如果您有几个字段,它使您的代码更易于维护,而不是将所有内容转储到控制器中。