Форма Symfony: как передать массив?

В Symfony, чтобы передать массив в форму, можно воспользоваться полем типа "collection". Такое поле позволяет работать с коллекцией однотипных данных, в том числе и с массивами.

Для начала, нужно создать форму с полем типа "collection". Можно использовать метод FormBuilder::add(), указав тип поля и его параметры. Например:

use SymfonyComponentFormExtensionCoreTypeCollectionType;
use SymfonyComponentFormExtensionCoreTypeTextType;

// ...

$builder->add('myArray', CollectionType::class, [
    'entry_type'   => TextType::class,
    'allow_add'    => true,
    'allow_delete' => true,
    'by_reference' => false,
]);

В этом примере мы создаем поле с именем "myArray", которое представляет собой коллекцию строк (TextType). Указанные параметры allow_add, allow_delete и by_reference позволяют добавлять новые элементы в массив, удалять элементы из массива и сохранять его порядок соответственно.

После того как форму создана, в контроллере мы можем использовать метод handleRequest() для обработки данных из запроса. В результате этого метода данные будут привязаны к форме, и мы сможем получить массив из формы:

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
    $myArray = $form->get('myArray')->getData();
    // ...
}

Вам также необходимо создать шаблон для отображения формы, где вы можете использовать метод form_row(form.myArray) для отображения поля:

{{ form_start(form) }}
    {{ form_row(form.myArray) }}
    <!-- другие поля формы -->
    {{ form_rest(form) }}
    <button type="submit">Отправить</button>
{{ form_end(form) }}

В этом примере мы использовали функции form_start() и form_end() для создания начального и конечного элементов формы, метод form_row() для отображения поля myArray и form_rest() для отображения всех остальных полей формы.

Таким образом, используя поле типа "collection", вы можете передать массив в форму Symfony и легко получить данные из формы после их отправки.