Symfony 5创建用户表单因roles字段报数组转字符串错误如何解决
问题原因
该报错由ChoiceType表单字段的配置错误导致:
你将multiple参数写在了attr配置数组中,该配置仅会给渲染生成的HTML元素添加multiple属性,不会告知Symfony表单组件该字段需要处理数组类型的值。表单初始化时会调用User实体的getRoles()方法获取初始值,该方法返回数组类型,而默认配置下的ChoiceType预期接收字符串类型的单值,尝试将数组转换为字符串时就会触发"Array to string conversion"报错。
解决方案
修改UserType.php中roles字段的配置,将multiple参数移到ChoiceType的顶层配置项即可,修改后的代码如下:
->add('roles', ChoiceType::class, [ 'label' => 'Tipo de usuario', 'multiple' => true, // 移到此处作为表单组件的配置项 'attr' => [ 'class'=>'form-control myselect' ], 'choices' => [ 'Admin' => 'ROLE_ADMIN', 'Usuario' => 'ROLE_USER' ], ])
补充说明
- 如果你希望用复选框而非下拉多选的形式展示角色选项,可额外添加
'expanded' => true顶层配置项。 - 如果你仅允许用户单选角色,需要额外为该字段添加数据转换器,实现
User实体的数组类型roles字段和表单预期的单值字符串之间的转换,避免类型不匹配报错。
内容的提问来源于stack exchange,提问作者Adrian Estevez
相关产品推荐
相关产品推荐

