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,非常感谢您的提示。它很有效。我稍后会更改实体的模型。您是对的,它没有得到很好的规划。