在表单中选择的 symfony setRole 最终出现错误

问题描述 投票:0回答:1

我正在使用一个实体将一些角色数据捕获到选择字段中。这很好用。发送表单后,我可以访问选择的值,如下所示:

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 

我该如何处理这个问题?我需要对其进行编码吗?我认为,如果我是对的,角色将存储为数组,但我不知道如何通过那里:(

有人可以给我提示吗?

php arrays symfony object transform
1个回答
3
投票

如果您使用

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
字段包含单个字符串?等等)

© www.soinside.com 2019 - 2024. All rights reserved.