【问题标题】:symfony setRole from choice in Form end up in an error表单中选择的 symfony setRole 最终出现错误
【发布时间】:2014-10-07 00:53:24
【问题描述】:

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

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 

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

谁能给我一个提示?

【问题讨论】:

  • 看来你正在尝试和stackoverflow.com/questions/8388080/…做同样的事情
  • 试试$userData ->setRoles($form->get('usergroups')->getData()->getRoles());$userData ->addRole($form->get('usergroups')->getData()->getRoles());

标签: arrays forms symfony object transform


【解决方案1】:

如果您使用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\Grouproles 字段包含单个字符串?等等。 )

【讨论】:

  • Kix,非常感谢您的提示。有用。稍后我将更改实体的模型。你是对的,它没有很好的计划。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多