我正在尝试以这种方式注册用户时添加角色:
$em = $this->getDoctrine()->getManager();
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user_data = $request->get('user_profile');
$user->setUsername($user_data['rif']);
$user->setEmail($user_data['user']['email']);
$user->setPlainPassword($user_data['user']['password']);
$user->addRole("ROLE_USER");
$userManager->updateUser($user);
除了DB中的角色存储为a:0:{}
并且找不到错误之外,所有工作都很好,可以给我一些建议吗?
答案 0 :(得分:1)
如果你的剩余部分有效,那么你的代码行
$user->addRole("ROLE_USER");
应该是
$user->setRoles(array("ROLE_USER"));
因为在您的User类(FOS \ UserBundle \ Model \ User)
中 public function setRoles(array $roles)
{
$this->roles = array();
foreach ($roles as $role) {
$this->addRole($role);
}
return $this;
}
方法是为设置角色而定义的,其值应该是数组格式..
答案 1 :(得分:1)
我认为您的问题是您正在尝试添加ROLE_USER
角色。
您是否尝试过添加其他角色?
问题在于......
FOS \ UserBundle \模型\的UserInterface
const ROLE_DEFAULT = 'ROLE_USER';
const ROLE_SUPER_ADMIN = 'ROLE_SUPER_ADMIN';
FOS \ UserBundle \模型\用户
public function addRole($role)
{
$role = strtoupper($role);
if ($role === static::ROLE_DEFAULT) {
// If supplied $role === ROLE_USER just return User object
return $this;
}
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
....
/**
* Returns the user roles
*
* @return array The roles
*/
public function getRoles()
{
$roles = $this->roles;
foreach ($this->getGroups() as $group) {
$roles = array_merge($roles, $group->getRoles());
}
// we need to make sure to have at least one role
$roles[] = static::ROLE_DEFAULT;
return array_unique($roles);
}
如果添加默认角色(ROLE_USER
),它实际上并未添加到角色列表中,因为默认情况下会将其添加到getRoles
方法中的角色。 / p>
答案 2 :(得分:0)
如果您创建这样的表单:
->add('roles','collection', array(
'label' => 'Rôle',
'type' => 'choice',
'options' => array(
'choices' => array(
'ROLE_USER' => 'Client',
'ROLE_ADMIN' => 'Admin',
'ROLE_SUPER_ADMIN' => 'SuperAdmin',
'ROLE_TECHNICIEN' => 'Technicien',
'ROLE_RESPONSABLE_PARC' => 'Responsable'
),
'expanded' => false,
'multiple' => false
)
))
像这样更改它:
$builder->add('roles', 'choice', array(
'label' => 'Rôles',
'choices' => array(
'ROLE_USER' => 'Client',
'ROLE_ADMIN' => 'Admin',
'ROLE_SUPER_ADMIN' => 'SuperAdmin',
'ROLE_TECHNICIEN' => 'Technicien ',
'ROLE_RESPONSABLE_PARC' => 'Responsable'
),
'expanded' => false,
'multiple' => true,
))
因为角色只是一个数组