简体   繁体   中英

Symfony entity annotations: constraints vs field types

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM