Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 表单中选择的symfony setRole最终出错_Arrays_Forms_Symfony_Object_Transform - Fatal编程技术网

Arrays 表单中选择的symfony setRole最终出错

Arrays 表单中选择的symfony setRole最终出错,arrays,forms,symfony,object,transform,Arrays,Forms,Symfony,Object,Transform,我正在使用一个实体将一些角色数据捕获到一个选择字段中。这个很好用。发送表单后,我可以访问选项的值,如下所示: object(Pr\UserBundle\Entity\Group)#1582 (3) { ["id":protected]=> int(2) ["name":protected]=>string(13) "Chief Roca" ["roles":protected]=> string(21) "ROLE_CUSTOMER_M

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

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
的默认实体设置,那么它的
角色
属性应该包含一个序列化数组(这是通过
对象
原则字段类型实现的,因此使用它是完全透明的)

这意味着应该对
FOS\UserBundle\Model\User::setRoles()
进行的正确调用如下所示:

$user->setRoles(array('ROLE_CUSTOMER_MANAGER'));
在您的情况下,一个简单的解决方法是使用
array\u map

$userData->setRoles(array_map(function($role) {
    return $role->getRoles();
}, form->get('usergroups')->getData()));

尽管如此,我还是建议修改表单/模型,以公开更好、更具逻辑性的API(例如,为什么复数
Pr\UserBundle\Entity\Group
roles
字段包含单个字符串?等等)

看起来您正试图做与Try
$userData->setRoles($form->get('usergroups')->getData()->getRoles()相同的事情
$userData->addRole($form->get('usergroups')->getData()->getRoles());
Kix,非常感谢您的提示。它很有效。我稍后会更改实体的模型。您是对的,它没有得到很好的规划。