Недопустимые символы в параметре $ child метода FormBuilderInterface-> add () - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать форму, которая изменит роли пользователей, для множества пользователей на одной странице. У пользователей есть уникальный адрес электронной почты и идентификатор. Однако при попытке добавить параметр $ child в форму, содержащую электронную почту пользователя:

$form->add($user->getEmail(), ChoiceType::class, [
                'choices' => $options,
                'placeholder' => 'Select role',
                'data' => $defaultValue,
            ]);

... я получаю сообщение об ошибке:

The name "mail@example.com" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").

Эта проблема исчезает, если Я добавляю имя пользователя вместо электронной почты:

$form->add($user->getUsername(), ChoiceType::class, [
                'choices' => $options,
                'placeholder' => 'Select role',
                'data' => $defaultValue,
            ]);

... но одних и тех же имен пользователей может быть очень много.

Как передать адрес электронной почты или идентификатор пользователя в форму чтобы убедиться, что значение выбранной роли относится к конкретному пользователю?

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Я нашел решение. Я передал значение идентификатора пользователя параметру $ child и заменил его на стороне клиента с помощью опции «label».

$form->add($user->getId(), ChoiceType::class, [
                'choices' => $options,
                'placeholder' => 'Select role',
                'data' => $defaultValue,
                'label' => $user->getEmail(),
            ]);

Итак, у меня есть прекрасный возвращаемый массив, который выглядит следующим образом:

['1' => 'role1',
 '2' => 'role2',
 '3' => 'role3',]

Однако на стороне клиента все остается ясно, поскольку идентификаторы были заменены электронными письмами пользователей.

0 голосов
/ 26 марта 2020

первый аргумент FormBuilder::add по сути просто имя , но это имя должно соответствовать некоторым ограничениям, в частности, что оно не содержит специальных символов (включая подчеркивания). Обычно оно также служит именем поля объекта, который редактируется / устанавливается /...

, в вашем случае я не вижу причин для этого конкретного имени поля (адрес электронной почты). Вы пробовали просто 'email' вместо?

$form->add('email', ChoiceType::class,
     //...
);

Я предполагаю (d), что вы хотите, чтобы в одном поле была выбрана электронная почта. В противном случае используйте формы CollectionType, как предложил Vyctorya в комментарии.

...