我在我的项目中使用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);
}
}
但是,这不会为我新创建的用户分配角色。我在这里做错了吗?
答案 0 :(得分:1)
我认为addRole正在寻找一个数组,你可以尝试:
...
addRole(array('ROLE_USER'));
...
addRole(array('ROLE_SONATA_PROVIDER'));
...
addRole(array('ROLE_SONATA_PROVIDER', 'ROLE_USER'));
...
答案 1 :(得分:0)
问题在于配置(config.yml)没有使用true作为确认,