I want to create a Symfony 2 Form for a Blog Post. One of the fields that I am wondering how might I implement is the tags field. Post
has a many-to-many relationship with Tag
. I want my Form to have 1 text box where users enter in a comma separated list of tags. Which will then be converted into multiple Tag
's.
How should I implement it? Do I:
- Have a
tagsInput
field (named differently from in theEntity
where$tags
should be anArrayCollection
) - On
POST
, I split the tags and create/get multiple tags. Then validate the tags (eg. MaxLength of 32)
I think you are already on the right way since I saw your other question about the form type. I will just comfort you with your choice.
A form type is probably the best way to go. With the form type, you will be able to display a single text field in your form. You will also be able to transform the data into a string for display to the user and to an
ArrayCollection
to set it in your model. For this, you use aDataTransformer
exactly as you are doing in your other question.With this technique, you don't need an extra field
tagsInput
in your model, you can have only a single field namedtags
that will anArrayCollection
. Having one field is possible because the you form type will transform that data from a string to anArrayCollection
.For the validation, I think you could use the
Choice
validator. This validator directive seems to be able to validate that an array does not have less than a number of item and not more than another number. You can check the documentation for it here. You would use it like this:If it does not work or not as intended, what you could do is to create a custom validator. This validator will then be put in your model for the
tags
field. This validator would validate the an array have a maximum number of element no greater than a fixed number (32 in your case).Hope this helps.
Regards,
Matt