Gas*_*per 3 symfony fosuserbundle sonata-admin
我正在使用SonataAdminBundle进行用户管理.我想改变用户的角色.目前我在configureFormFields方法中的代码是这样的,但角色永远不会更新,我不知道为什么.
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
->add('roles', 'choice', array(
'choices' => array(
'ROLE_ADMIN' => 'ADMIN',
'ROLE_USER' => 'API USER',
),
'expanded' => false,
'multiple' => true,
'required' => false
))
->add('email')
->add('plainPassword', 'text', array('label' => 'Password', 'required' => false))
->end()
;
}
Run Code Online (Sandbox Code Playgroud)
FOSUserBundle支持每个用户拥有多个ROLES,这确实很好.然而,根据我的经验,一个常见的用例是每个用户一个角色.
管理此方法的一种简单方法是将以下方法添加到模型/实体对象以获取单个角色:
public function getRole() {
$role = $this->roles[0];
return $role;
}
Run Code Online (Sandbox Code Playgroud)
注意:$role = $this->roles[0]将返回数据库角色字段中的第一个ROLE.您可能需要使用自己的逻辑选择正确的角色.或者,您可能还需要获得默认角色.如果您使用$this->getRoles()而不是$this->roles您拥有数据库角色以及返回数组中的默认角色.
接下来,您需要添加匹配的setter以允许您保存每个用户的单个角色.这个实现将起作用.
public function setRole($role) {
$this->setRoles(array($role));
}
Run Code Online (Sandbox Code Playgroud)
最后,您需要在用户表单中添加一个角色字段:
$builder->add('role', 'choice', array(
'choices' => array(
'ROLE_USER' => 'User',
'ROLE_ADMIN' => 'Admin',
'ROLE_SUPER_ADMIN' => 'Super Admin'
),
'multiple' => false
));
Run Code Online (Sandbox Code Playgroud)
需要注意的重要事项:
$builder->add('role'...:'role'不'roles'
| 归档时间: |
|
| 查看次数: |
1496 次 |
| 最近记录: |