FormBuilderInterface->add() 方法的 $child 参数中的非法字符
Illegal characters in $child param of FormBuilderInterface->add() method
我正在尝试为一页上的许多用户创建一个可以更改用户角色的表单。
用户具有唯一的电子邮件和 ID。但是,当我尝试将 $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,
]);
...但是相同的用户名可以有很多。
如何将用户的电子邮件或用户 ID 传递到表单以确保所选角色的值与特定用户相关?
FormBuilder::add
的第一个参数基本上 只是一个名称 ,但该名称必须符合一些限制,特别是它不包含特殊字符(包括下划线)。它通常也用作正在 edited/set/...
的实体的字段名称
在您的情况下,我看不到这个特定字段名称(电子邮件地址)的原因。你试过 'email'
吗?
$form->add('email', ChoiceType::class,
//...
);
我假设 (d) 您想要一个字段 select 一封电子邮件。否则,请使用 CollectionType 形式,正如 Vyctorya 在评论中所建议的那样。
我找到了解决办法。我将用户 ID 值传递给 $child 参数,并使用 "label" 选项在客户端替换它。
$form->add($user->getId(), ChoiceType::class, [
'choices' => $options,
'placeholder' => 'Select role',
'data' => $defaultValue,
'label' => $user->getEmail(),
]);
所以我有一个漂亮的返回数组,如下所示:
['1' => 'role1',
'2' => 'role2',
'3' => 'role3',]
但是,在客户端,一切都很清楚,因为 ID 已被用户的电子邮件替换。
我正在尝试为一页上的许多用户创建一个可以更改用户角色的表单。 用户具有唯一的电子邮件和 ID。但是,当我尝试将 $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,
]);
...但是相同的用户名可以有很多。
如何将用户的电子邮件或用户 ID 传递到表单以确保所选角色的值与特定用户相关?
FormBuilder::add
的第一个参数基本上 只是一个名称 ,但该名称必须符合一些限制,特别是它不包含特殊字符(包括下划线)。它通常也用作正在 edited/set/...
在您的情况下,我看不到这个特定字段名称(电子邮件地址)的原因。你试过 'email'
吗?
$form->add('email', ChoiceType::class,
//...
);
我假设 (d) 您想要一个字段 select 一封电子邮件。否则,请使用 CollectionType 形式,正如 Vyctorya 在评论中所建议的那样。
我找到了解决办法。我将用户 ID 值传递给 $child 参数,并使用 "label" 选项在客户端替换它。
$form->add($user->getId(), ChoiceType::class, [
'choices' => $options,
'placeholder' => 'Select role',
'data' => $defaultValue,
'label' => $user->getEmail(),
]);
所以我有一个漂亮的返回数组,如下所示:
['1' => 'role1',
'2' => 'role2',
'3' => 'role3',]
但是,在客户端,一切都很清楚,因为 ID 已被用户的电子邮件替换。