@square

Как правильно работать с полем сущности типа array?

Всем здравствуйте, есть такая сущность:
class Ent
{
    /**
     * @var array
     *
     * @ORM\Column(name="data", type="array", nullable=false)
     *
     * @Assert\NotBlank
     * @Assert\Collection(fields = {
     *    "country" = @Assert\Required({
     *         @Assert\NotBlank,
     *         @Assert\Country
     *    }),
     *    "cnt" = @Assert\Required({
     *         @Assert\NotBlank,
     *         @Assert\Range(min = 1, max = 9)
     *    }),
     *    "startDate" = @Assert\Required({
     *         @Assert\NotBlank,
     *         @Assert\Date
     *    })
     * })
     */
    protected $data;
}


может ли кто-то подсказать, как правильно создать FormType для работы с полем data? Сломал уже весь мозг.

Заранее спасибо.
  • Вопрос задан
  • 405 просмотров
Пригласить эксперта
Ответы на вопрос 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Ну, дело в том, что тип array изначально для работы с формами не предназначался, насколько я знаю.
Его можно вполне логично применять для хранения каких-то данных, которые содержат несколько сущностей (не в том плане, который имеется в виду в Symfony), но при этом нет смысла их нормализовывать разнося по разным полям или таблицам.
Например, тип array использвуется в IPhpFileStoreBundle для хранения информации о файле.
Так что во-первых, можно просто не использовать array, если это не такой случай. Или же, если он именно такой - вы можете попробовать сделать свой тип поля и трансформер для него.
Либо, в самом простом варианте (но не самом правильном) - добавлять поля с 'mapped' => false и обрабатывать вручную содержимое массива и заполнять его данными. Лучше, конечно, выбрать один из предыдущих способов.
Как вариант (здесь я не уверен, что это будет работать), можете попробовать добавлять поля используя синтаксис обращения к дочерним элементам:
$formBuilder
    ->add('arrayField.key1')
    ->add('arrayField.key2')

Но это лишь предположение, которое я сам не проверял.

UPD: А ещё посмотрите тут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы