douzhixun8393 2014-03-11 23:19
浏览 43
已采纳

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

The Symfony docs list a number of field types that can be used when rendering forms. However, the docs also specify constrains that can be used for form validation. Can these two concepts be combined so that my Entity annotations will cause Symfony to use the correct form field type instead of just guessing?

For example, I have a User entity with a password field, which has the following annotations:

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

I then use the FormBuilderInterface to render the field:

$builder
  ->add('password')

As you can see, I've not passed any additional options. Symfony renders this as a textfield, and seems to flatout ignore the password annotation.

How can I get Symfony to display this as a password field? Do I have to pass additional options using the FormBuilderInterface like this?

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

Is there any other way of doing this? Using annotations in my User entity seems like the perfect place to hint at the form field type, but Symfony just doesn't seem to take them into account when rendering the field.

  • 写回答

1条回答 默认 最新

  • douyinglan2599 2014-03-12 00:52
    关注

    Entities assert annotations get parsed when you call isValid() not when you build their forms, forms will only take in ORM annotations (your string fieldtype). Adding optional fieldtype to your form builder is probably the best way to go about it, I haven't found a better one.

    And as @Alan pointed out defining a view component (html input) in an entity file wouldn't make much sense in any case. The best place for it is an entity's type file, especially if you have several fields it makes your code that much more maintanable as opposed to dumping everything in the controller.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?