Sonata + FOSUserBundle 编辑表单上的角色编辑

3

我正在使用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()
        ;
    }

你能展示一下用户控制器中的编辑动作吗?在提交后,如果你 var_dump 请求中的角色,会得到什么结果? - Hajri Aymen
2个回答

6

FOSUserBundle支持为一个用户分配多个角色,这是非常好的。然而,在我的经验中,一个常见的用例是每个用户只有一个角色。

管理这种情况的简单方法是在您的模型/实体对象中添加以下方法以获取一个单一的角色:

public function getRole() {
    $role = $this->roles[0];
    return $role;
}

注意: $role = $this->roles[0] 将返回数据库角色字段中的第一个角色。也许您需要按照自己的逻辑选择正确的角色,或者您还需要获取默认角色。如果您使用 $this->getRoles() 而不是 $this->roles,则会在返回的数组中获得数据库角色和默认角色。
接下来,您需要添加相应的setter以允许保存每个用户的单个角色。此实现将有效运行。
public function setRole($role) {
    $this->setRoles(array($role));
}

最后,您需要在用户表单中添加一个角色字段:
$builder->add('role', 'choice', array(
    'choices' => array(
        'ROLE_USER' => 'User',
        'ROLE_ADMIN' => 'Admin',
        'ROLE_SUPER_ADMIN' => 'Super Admin'
    ),
    'multiple' => false
));

一个需要注意的重要事项是:
$builder->add('role'...:应该使用'role'而不是'roles'

0
如果您创建的标签与角色完全相同,代码将能够正常工作。例如:
->add('roles', 'choice', array(
                'choices' => array(
                    'ROLE_ADMIN' => 'ROLE_ADMIN',
                    'ROLE_USER'  => 'ROLE_USER',
                ),
                'expanded' => false,
                'multiple' => true,
                'required' => false
            ))

供应商版本,已经与上述代码进行了测试

doctrine/doctrine-bundle 1.8.1
friendsofsymfony/user-bundle 2.1.2
doctrine/orm 2.6.1
sonata-project/admin-bundle 3.33.0
sonata-project/doctrine-orm-admin-bundle 3.4.2
symfony/symfony 3.4.6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接