角色的Symfony Easyadmin选择类型字段
我使用easyadmin,我希望字段“role”显示字段类型“radio”中的角色选择,但出现了此类型的错误(数组到字符串的转换)(请参见下图): 这是我的配置:角色的Symfony Easyadmin选择类型字段,symfony,easyadmin,Symfony,Easyadmin,我使用easyadmin,我希望字段“role”显示字段类型“radio”中的角色选择,但出现了此类型的错误(数组到字符串的转换)(请参见下图): 这是我的配置: easy_admin: entities: User: class: AppBundle\Entity\User form: fields: - { property: 'username' } - { p
easy_admin:
entities:
User:
class: AppBundle\Entity\User
form:
fields:
- { property: 'username' }
- { property: 'email' }
- { property: 'enabled' }
- property: 'plainPassword'
type: 'repeated'
type_options:
type: Symfony\Component\Form\Extension\Core\Type\PasswordType
required: false
first_options: { label: '%label.password%' }
second_options: { label: '%label.password_confirmation%' }
invalid_message: fos_user.password.mismatch
- property: 'roles'
type: 'choice'
type_options:
mapped: true
expanded: true
multiple: false
choices: { 'Conseiller': 'ROLE_USER', 'Administrateur': 'ROLE_ADMIN' }
有人会给我提供一个解决方案,让我可以用easyadmin显示单选按钮吗
提前感谢在Symfony 3.4中有一个解决方案(使用“是/否”下拉列表)可以帮助: 在config.yml中
imports:
...
- { resource: easyAdmin.yml }
在easyadmin.yml中
fields:
...
- property: 'hasRoleAdmin'
label: 'Is admin?'
type: choice
type_options:
choices:
'No': 'No'
'Yes': 'Yes'
在用户实体中:
public function hasRoleAdmin()
{
return ($this->hasRole('ROLE_ADMIN')) ? 'Yes' : 'No';
}
public function setHasRoleAdmin($isAdmin)
{
if ('Yes' === $isAdmin && 'No' === $this->hasRole('ROLE_ADMIN')) {
$this->addRole('ROLE_ADMIN');
}
if ('No' === $isAdmin && 'Yes' == $this->hasRole('ROLE_ADMIN')) {
$this->removeRole('ROLE_ADMIN');
}
$this->isAdmin = $isAdmin;
}
以下是Symfony 3.4中的一个解决方案(使用是/否下拉列表),可能会有帮助: 在config.yml中
imports:
...
- { resource: easyAdmin.yml }
在easyadmin.yml中
fields:
...
- property: 'hasRoleAdmin'
label: 'Is admin?'
type: choice
type_options:
choices:
'No': 'No'
'Yes': 'Yes'
在用户实体中:
public function hasRoleAdmin()
{
return ($this->hasRole('ROLE_ADMIN')) ? 'Yes' : 'No';
}
public function setHasRoleAdmin($isAdmin)
{
if ('Yes' === $isAdmin && 'No' === $this->hasRole('ROLE_ADMIN')) {
$this->addRole('ROLE_ADMIN');
}
if ('No' === $isAdmin && 'Yes' == $this->hasRole('ROLE_ADMIN')) {
$this->removeRole('ROLE_ADMIN');
}
$this->isAdmin = $isAdmin;
}
@约翰:你所做的几乎是正确的 事实上,您不能对角色使用单选按钮,因为角色(请参见
s
)是多选字段。您需要使用复选框(或多重选择)
在您的代码中,唯一错误的部分是:multiple:false
。
如果尝试将数组映射到单个选项字段,则是尝试将数组映射到字符串,因此会出现错误。
只需将multiple:false
更改为multiple:true
结果是:
easy_admin:
entities:
User:
class: AppBundle\Entity\User
form:
fields:
- { property: 'username' }
- { property: 'email' }
- { property: 'enabled' }
- property: 'plainPassword'
type: 'repeated'
type_options:
type: Symfony\Component\Form\Extension\Core\Type\PasswordType
required: false
first_options: { label: '%label.password%' }
second_options: { label: '%label.password_confirmation%' }
invalid_message: fos_user.password.mismatch
- property: 'roles'
type: 'choice'
type_options:
mapped: true
expanded: true
multiple: true
choices: { 'Conseiller': 'ROLE_USER', 'Administrateur': 'ROLE_ADMIN' }
@约翰:你所做的几乎是正确的 事实上,您不能对角色使用单选按钮,因为角色(请参见
s
)是多选字段。您需要使用复选框(或多重选择)
在您的代码中,唯一错误的部分是:multiple:false
。
如果尝试将数组映射到单个选项字段,则是尝试将数组映射到字符串,因此会出现错误。
只需将multiple:false
更改为multiple:true
结果是:
easy_admin:
entities:
User:
class: AppBundle\Entity\User
form:
fields:
- { property: 'username' }
- { property: 'email' }
- { property: 'enabled' }
- property: 'plainPassword'
type: 'repeated'
type_options:
type: Symfony\Component\Form\Extension\Core\Type\PasswordType
required: false
first_options: { label: '%label.password%' }
second_options: { label: '%label.password_confirmation%' }
invalid_message: fos_user.password.mismatch
- property: 'roles'
type: 'choice'
type_options:
mapped: true
expanded: true
multiple: true
choices: { 'Conseiller': 'ROLE_USER', 'Administrateur': 'ROLE_ADMIN' }
@geob只要只有管理员和非管理员用户,您的解决方案就可以工作,但如果您有两种以上的用户类型,它就不能工作。@Daishi Correct。为其创建该方法的应用程序只需要两个角色。@geob只要只有管理员和非管理员用户,您的解决方案就可以工作,但如果您有两种以上的用户类型,则该解决方案将无法工作。@Daishi Correct。为其创建该方法的应用程序只需要两个角色。谢谢。我在保存新角色时遇到了一个问题:角色(json格式)被保存为对象而不是数组。在setRoles(roles)方法中添加“array\u values”,如:$this->roles=array\u values($roles),解决了这个问题。这将重新索引数组,结果将作为数组存储在JSONTANKS中。我在保存新角色时遇到了一个问题:角色(json格式)被保存为对象而不是数组。在setRoles(roles)方法中添加“array\u values”,如:$this->roles=array\u values($roles),解决了这个问题。这将重新索引数组,结果存储为json中的数组