Symfony 在创建时将新的FOSUserBundle用户添加到默认组

Symfony 在创建时将新的FOSUserBundle用户添加到默认组,symfony,fosuserbundle,Symfony,Fosuserbundle,我正在建立我的第一个严肃的Symfony2项目。我正在为我的用户/组管理扩展FOSUserBundle,我希望自动将新用户添加到默认组。 我想您只需要像这样扩展用户实体构造函数: /** * Constructor */ public function __construct() { parent::__construct(); $this->groups = new \Doctrine\Common\Collections\ArrayCollection();

我正在建立我的第一个严肃的Symfony2项目。我正在为我的用户/组管理扩展FOSUserBundle,我希望自动将新用户添加到默认组。 我想您只需要像这样扩展用户实体构造函数:

/**
 * Constructor
 */
public function __construct()
{
    parent::__construct();
    $this->groups = new \Doctrine\Common\Collections\ArrayCollection();
    // Get $defaultGroup entity somehow ???
    ...
    // Add that group entity to my new user :
    $this->addGroup($defaultGroup);
}
但我的问题是,首先如何获得$defaultGroup实体


我尝试从实体内部使用实体管理器,但后来我意识到这很愚蠢,Symfony抛出了一个错误。我在谷歌上搜索了一下,但没有找到真正的解决办法,除了可能。。。虽然这对我来说似乎很不清楚。

你没有说你的用户是如何创建的。当一些管理员创建用户或您有自定义注册操作时,您可以在控制器的操作中设置组

$user->addGroup($em->getRepository('...')->find($group_id));

但是,如果使用fosuserbundles内置注册,则必须连接到控制器:并使用事件侦听器。

好的,我开始实施的想法

我做的第一件事是在composer.json中将FOSUserBundle更新为2.0.*@dev,因为我使用的是v1.3.1,它没有实现FOSUserEvents类。这是订阅我的注册活动所必需的

//composer.json
“friendsofsymfony/用户包”:“2.0.*@dev”,
然后我添加了一项新服务:


在XML中,我告诉服务我需要通过参数
doctor.orm.entity\u manager
访问doctor。然后,我创建了侦听器:

//Moskito/Bundle/UserBundle/EventListener/UserCreationListener.php

你答案的第二部分看起来像我想做的。我将尝试实现它,并将答案作为解决方案发布在这里。