ChoiceType Данные с несколькими значениями нуждаются в массиве, но дают "преобразование массива в строку". Как решить? - PullRequest
1 голос
/ 12 июня 2019

При использовании Symfony 4.3 FormBuilderInterface я создаю форму. Важно, чтобы я не использовал кодированные классы со структурой данных.

У меня есть ChoiceType с несколькими значениями, который нуждается в некоторой помощи при заполнении.

Создание формы в порядке. Даже возвращение (несколько) значений из формы работает отлично. Однако, когда я пытаюсь предварительно заполнить форму с помощью setData ... Это немного шизофренично.

Вот

Дано:

$arr = ['Person1' => 'John', 'Person123' => 'George'];
$form->add('RelatedToPerson', ChoiceType::class, [ 'multiple' => true, 'choices' => $arr]);

Теперь мы хотим установить данные для этого множественного выбора с помощью:

$chosen = ['Person123'];

Итак, я делаю:

$form->get('RelatedToPerson')->setData($chosen);

Что дает: «Примечание: преобразование массива в строку»

Почему? Это массив строк. Это не говорит, что ему нужно. Может быть, для этого нужна строка через запятую?

Я делаю:

$form->get($item['name'])->setData(implode(', ', $chosen));

и получите: "Невозможно преобразовать значение для пути свойства" [RelatedToPerson] ": ожидается массив."

Вывод: ему нужен массив, но когда я даю ему один ... это не правильный тип?

Что я должен сделать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Решено! По-видимому, «массив строк», который я дал setData, был как-то загрязнен. Вы действительно должны убедиться, что все значения в вашем массиве явно определены как (строка). Если нет, вы получите сообщение об ошибке.

Здесь описано одно решение: Symfony устанавливает данные для множественного выбораТип

Для своего решения я сделал нечто подобное: я пошел к источнику (где данные сначала поступают в приложение) и убедился, что перед каждым добавлением в массив ставится (строка). Данные, которые я собираю, изначально являются строками, но, по-видимому, для некоторых строк php присваивает им другой тип. : - /

0 голосов
/ 12 июня 2019

Метод setData устанавливает значение по умолчанию для элемента формы и ожидает строку.Для вашего примера вы должны использовать:

$form->get('RelatedToPerson')->setData('George');

, чтобы иметь второй вариант вашего массива выбора, который будет выбран при отображении формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...