【发布时间】:2016-05-04 10:25:00
【问题描述】:
我必须将用户的角色显示为列表:我不想输入它,而是点击选项。我会得到 ROLE_USER、ROLE_ADMIN、...等选项。
在我的 config.yml 中是否有任何配置更改?
感谢您的帮助, 茴香
【问题讨论】:
标签: symfony symfony2-easyadmin
我必须将用户的角色显示为列表:我不想输入它,而是点击选项。我会得到 ROLE_USER、ROLE_ADMIN、...等选项。
在我的 config.yml 中是否有任何配置更改?
感谢您的帮助, 茴香
【问题讨论】:
标签: symfony symfony2-easyadmin
是的。您必须使用 choice type 及其 expanded 选项(以及可选的 multiple 选项)。请记住,用于表单类型的选项在 type_options 选项中定义:
easy_admin:
# ...
entities:
User:
# ...
form:
fields:
- { property: 'roles', type: 'choice', type_options: { expanded: true } }
如果需要,您还可以在 YAML 文件中定义选项:
easy_admin:
# ...
entities:
User:
# ...
form:
fields:
- property: 'roles'
type: 'choice'
type_options:
expanded: true
choices: { 'ROLE_USER': 'Normal user', 'ROLE_ADMIN': 'Administrator' }
【讨论】:
multiple: true 也添加到 type_options 中。并且您需要反转键和值(即交换 ROLE_USER 和普通用户等)
花了一些时间,但这里有一种可能的方法来添加一个复选框以向用户添加或删除角色ROLE_ADMIN:
在您的 easyadmin 配置中,对于 User 实体,添加:
- {property: 'hasRoleAdmin', label: 'Is admin', type: checkbox}
或者,对于执行相同操作的下拉菜单:
- {property: 'hasRoleAdmin', label: 'Role', type: choice, type_options: choices: {0: 'ROLE_USER', 1: 'ROLE_ADMIN'}}}
在您的用户实体中,添加:
public function hasRoleAdmin()
{
return $this->hasRole('ROLE_ADMIN');
}
public function setHasRoleAdmin($isAdmin)
{
if (true == $isAdmin && false == $this->hasRole('ROLE_ADMIN')) {
$this->addRole('ROLE_ADMIN');
}
if (false == $isAdmin && true == $this->hasRole('ROLE_ADMIN')) {
$this->removeRole('ROLE_ADMIN');
}
$this->isAdmin = $isAdmin;
}
【讨论】: