Я думаю, что вы уже на правильном пути, так как я видел ваш вопрос о типе формы. Я просто утешу вас своим выбором.
Тип формы, вероятно, лучший путь. С типом формы вы сможете отобразить одно текстовое поле в вашей форме. Вы также сможете преобразовать данные в строку для отображения пользователю и в ArrayCollection
, чтобы установить ее в вашей модели. Для этого вы используете DataTransformer
точно так же, как и в своем другом вопросе.
С помощью этой техники вам не нужно дополнительное поле tagsInput
в вашей модели, вы можете иметь только одно поле с именем tags
, которое будет ArrayCollection
. Возможно наличие одного поля, поскольку тип формы you преобразует эти данные из строки в ArrayCollection
.
Для проверки, я думаю, вы могли бы использовать Choice
валидатор. Эта директива валидатора, по-видимому, может подтвердить, что в массиве не меньше номера элемента и не больше другого числа. Вы можете проверить документацию для этого здесь . Вы бы использовали это так:
// src/Acme/BlogBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
class Post
{
/**
* @Assert\Choice(min = 1, max = 32)
*/
protected $tags;
}
Если это не работает или не работает как задумано, то вы можете создать собственный валидатор. Этот валидатор будет добавлен в вашу модель для поля tags
. Этот валидатор будет проверять, что массив имеет максимальное количество элементов, не превышающее фиксированное число (32 в вашем случае).
Надеюсь, это поможет.
С уважением,
Matt