Symfony2 FOS在控制器中分配角色

时间:2015-07-10 09:00:11

标签: php forms symfony fosuserbundle sonata-user-bundle

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

这是表单字段:

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

我覆盖了注册控制器,在确认动作中我做到了这一点:

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);
        }

    }

但是,这不会为我新创建的用户分配角色。我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

问题在于配置(config.yml)没有使用true作为确认,

请参阅:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/configuration_reference.md了解更多信息