我正在使用一个实体将一些角色数据捕获到选择字段中。这很好用。发送表单后,我可以访问选择的值,如下所示:
object(Pr\UserBundle\Entity\Group)#1582 (3) {
["id":protected]=> int(2)
["name":protected]=>string(13) "Chief Roca"
["roles":protected]=> string(21) "ROLE_CUSTOMER_MANAGER"
}
现在,如果我想通过
保存它$userData ->setRoles($form->get('usergroups')->getData());
我最终遇到以下错误
Catchable Fatal Error: Argument 1 passed to FOS\UserBundle\Model\User::setRoles()
must be of the type array, object given, called in /var/www/symfony/webprojekt/src/Pr/UserBundle/Controller/AdminController.php
on line 427 and defined in /var/www/symfony/webprojekt/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Model/User.php line 530
我该如何处理这个问题?我需要对其进行编码吗?我认为,如果我是对的,角色将存储为数组,但我不知道如何通过那里:(
有人可以给我提示吗?
如果您使用
FOSUserBundle
的默认实体设置,则其 roles
属性应包含一个序列化数组(这是通过 object
Doctrine 字段类型实现的,因此使用起来完全透明)。
这意味着应该对
FOS\UserBundle\Model\User::setRoles()
进行的正确调用如下所示:
$user->setRoles(array('ROLE_CUSTOMER_MANAGER'));
针对您的情况,一个简单的解决方法是使用
array_map
:
$userData->setRoles(array_map(function($role) {
return $role->getRoles();
}, form->get('usergroups')->getData()));
尽管如此,我建议重新设计表单/模型以公开更好、更符合逻辑的 API(例如,为什么 plural
Pr\UserBundle\Entity\Group
的 roles
字段包含单个字符串?等等)