FOSUserBundle,团体和注册表

时间:2014-01-07 10:48:59

标签: php symfony fosuserbundle

这应该是如此简单,但我现在有一天。

(我正在使用Symfony 2.4.1)

我跟着Using Groups With FOSUserBundle写了这封信。我想允许用户在注册时选择一个组。因此,正如我所遵循的那样,我创建了“多对多”关系,并且有一个fos_user_user_group表来包含这些关系。

我也跟着Overriding Default FOSUserBundle Forms,以便我可以在注册表单中添加组字段以供选择。

遵循上述(不添加我自己的setGroups函数等),我得到以下错误

  

ContextErrorException:警告:array_merge():参数#2不是C:\ Users \ ppounder \ Documents \ Development \ KP \ htdocs \ symfony \ kp \ vendor \ friendsofsymfony \ user-bundle \ FOS \ UserBundle \中的数组Model \ User.php第279行

     

在C:\ Users \ ppounder \ Documents \ Development \ KP \ htdocs \ symfony \ kp \ vendor \ friendsofsymfony \ user-bundle \ FOS \ UserBundle \ Model \ User.php第279行   在ErrorHandler-> handle('2','array_merge():参数#2不是数组','C:\ Users \ ppounder \ Documents \ Development \ KP \ htdocs \ symfony \ kp \ vendor \ friendsofsymfony \ user -bundle \ FOS \ UserBundle \ Model \ User.php','279',array('roles'=> array(),'group'=> object(Group)))

看着桌子,一切都按照我的预期进行了。添加用户,组和用户列在连接表中。

我的用户实体中没有针对我的群组的getter和setter,因为FOSUserBundle没有提及任何需要。但是我尝试在我的用户实体中将以下内容添加到我的构造中:

public function __construct()
{
    parent::__construct();
    // your own logic
    $this->groups = new ArrayCollection();
}

但仍然没有运气。如上面的错误所示,第二个参数是一个对象。

FYI - groups字段的FormType buildForm方法是:

$builder->add('groups', 'entity', array(
    'class' => 'AcmeDemoBundle:Group',
    'property' => 'name',
    'expanded' => true,
    'multiple' => true,
    'required' => true,
    'empty_value' => '--Select Group--'
));

任何帮助都将不胜感激。

更新

当我尝试登录并将用户分配到一个或多个组时,也会发生此错误。因此,它必须与getGroups()函数(不在我的User实体中)有关。我必须要覆盖,但是如何?

如果我添加以下内容,则会删除错误,但会停止插入连接表

public function getGroups()
{
    return $this->groups = new ArrayCollection;
}

1 个答案:

答案 0 :(得分:3)

找到它,它与getGroup和setGroup无关。

错误是用户角色和组角色合并时的错误。当我因某种原因设置组时,它没有将内容作为数组存储在我的Group表中。因此,它无法将它们一起排列。

在“组”表中对角色字段进行排序,现在可以正常工作。

希望将来帮助某人。