Symfony 表单 - 内部带有复选框的集合类型
Posted
技术标签:
【中文标题】Symfony 表单 - 内部带有复选框的集合类型【英文标题】:Symfony Form - Collection Type with Checkboxes inside 【发布时间】:2020-07-18 00:33:02 【问题描述】:我正在使用 Symfony 5,我想在管理中有一个“用户编辑”页面,我将在其中更改用户角色,我想有复选框来定义分配给用户的角色,因此,我需要 Collection在里面输入 CheckboxType 条目(如果我是真的),但首先我不能使用用户角色数组作为集合类型的值
$builder
->add('roles', CollectionType::class, [
'entry_type' => CheckboxType::class,
'entry_options' => [
'required' => false,
],
])
这会引发错误
无法转换属性路径“[0]”的值:应为布尔值。
之后,我尝试使用模型转换器来更改值,下面是我如何做到的代码
$builder->get('roles')
->addModelTransformer(new CallbackTransformer(
function($rolesAsArray)
$rolesAsArray = array_flip($rolesAsArray);
foreach($rolesAsArray as &$role)
$role = true; // I also tried to set key instead of value - true
return $rolesAsArray;
,
function($rolesAsString)
dump($rolesAsString);die;
));
在此之后,我没有收到错误,但我得到了具有这种外观的表单
所以我没有任何更改标签的选项,即使我提交包含这些字段的表单也会引发错误
在属性路径“roles”处给出“array”、“null”类型的预期参数。
我找到了一种使用 Select Box 的方法,但我找不到任何使用 Checkbox 的方法。
如果你有什么想法,请告诉我。
【问题讨论】:
【参考方案1】:您可以使用 ChoiceType :
$builder->add('roles', ChoiceType::class, array(
'label' => 'form.label.role',
'choices' => User::ROLES,
'choice_translation_domain' => 'user',
'multiple' => true,
'expanded' => true,
'required' => true,
));
在用户实体中:
const ROLES = array(
'roles.admin' => 'ROLE_ADMIN',
'roles.secretary' => 'ROLE_SECRETARY',
'roles.user' => 'ROLE_USER'
);
【讨论】:
不,我需要多个角色,用我已经做过的选择框,这并不难,问题是复选框有这个功能 当您将 ChoiceType 与 multiple=true 和 expand=true 一起使用时,您有多个带复选框的角色,我将它用于我的用户角色以上是关于Symfony 表单 - 内部带有复选框的集合类型的主要内容,如果未能解决你的问题,请参考以下文章