我正在使用Symfony 5,我希望在管理中有一个“用户编辑”页面,在该页面中,我将更改用户角色,我希望具有复选框以定义分配给用户的角色,因此,我需要收集类型内部带有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;
}
));
此后,我没有收到错误,但得到的外观与此类似
所以我没有任何选择来更改标签,甚至我使用这些字段提交表单也会引发错误
在属性路径“角色”中给出的“数组”类型的预期参数,“空”。
我找到了一种使用Select Box的方法,但是我找不到使用Checkbox的任何方法。
如果有什么想法请告诉我。
您可以使用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'
);