Symfony2 FOS 在控制器中分配角色

Symfony2 FOS assigning roles in the controller

我在我的项目中使用了 FOS bundle 和 SonataUserBundle。 当用户在表单中注册时,他选择了他的帐户类型。他是买家卖家还是两者兼而有之。根据所选的选择,他应该被分配到不同的角色。

这是表单域:

->add('type', 'choice', array(
                'label' => 'form.label.type',
                'required' => true,
                'choices' => array(
                'buy' => 'Client',
                'sell' => 'Provider',
                'both' => 'Both'
                )
            ))

我覆盖了 registrationcontroller 并且在 confirmedAction 中我这样做了:

public function confirmedAction()
    {
        $user = $this->container->get('security.context')->getToken()->getUser();
        $type = $user->container->getType();
        $userManager = $this->container->get('fos_user.user_manager');

        if($type == 'buy') {
            $user->container->addRole('ROLE_USER');
            $userManager->updateUser($user);
        }

        else if($type == 'sell') {
            $user->container->addRole('ROLE_SONATA_PROVIDER');
            $userManager->updateUser($user);
        }
        else {
            $user->container->addRole('ROLE_SONATA_PROVIDER', 'ROLE_USER');
            $userManager->updateUser($user);
        }

    }

然而,这并没有为我新创建的用户分配角色。我是不是做错了什么?

我认为 addRole 正在寻找一个数组,你可以试试:

...
addRole(array('ROLE_USER'));
...
addRole(array('ROLE_SONATA_PROVIDER'));
...
addRole(array('ROLE_SONATA_PROVIDER', 'ROLE_USER'));
...

问题是关于配置(config.yml)没有启用确认,

有关详细信息,请参阅:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/configuration_reference.md