Анализ строки, разделенной запятыми, в несколько записей базы данных (например, теги) - PullRequest
1 голос
/ 11 декабря 2011

Я хочу создать форму Symfony 2 для блога. Одним из полей, которые мне интересно, как я могу реализовать, является поле тегов. Post имеет отношение многие ко многим с Tag. Я хочу, чтобы в моей форме было 1 текстовое поле, в которое пользователи вводили бы список тегов через запятую Который затем будет конвертирован в несколько Tag.

Как мне это реализовать? Должен ли я:

  • Иметь поле tagsInput (имя которого отличается от Entity, где $tags должно быть ArrayCollection)
  • На POST я разделяю теги и создаю / получаю несколько тегов. Затем проверьте теги (например, MaxLength of 32)

1 Ответ

1 голос
/ 11 декабря 2011

Я думаю, что вы уже на правильном пути, так как я видел ваш вопрос о типе формы. Я просто утешу вас своим выбором.

Тип формы, вероятно, лучший путь. С типом формы вы сможете отобразить одно текстовое поле в вашей форме. Вы также сможете преобразовать данные в строку для отображения пользователю и в 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

...