gpt4 book ai didi

symfony - Sonata + FOSUserBundle 在编辑表单上编辑角色

转载 作者:行者123 更新时间:2023-12-02 12:12:43 25 4
gpt4 key购买 nike

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

最佳答案

FOSUserBundle 支持每个用户拥有多个角色,这确实是件好事。然而,根据我的经验,常见的用例是每个用户一个角色。

管理此问题的一个简单方法是将以下方法添加到模型/实体对象中以获得单个角色:

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

注意:$role = $this->roles[0] 将返回数据库角色字段中的第一个 ROLE。可能你需要用自己的逻辑来选择正确的角色。或者,您也可能需要获取默认角色。如果您使用 $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' NOT 'roles'

关于symfony - Sonata + FOSUserBundle 在编辑表单上编辑角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com