首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角色的Symfony Easyadmin选择类型字段

角色的Symfony Easyadmin选择类型字段
EN

Stack Overflow用户
提问于 2018-08-24 21:56:30
回答 2查看 11.5K关注 0票数 1

我使用easyadmin,我希望"role“字段显示字段类型"radio”中的角色选择,但是发生了这种类型的错误(数组到字符串的转换)(见下图):

Notice: Array to string conversion

下面是我的配置:

代码语言:javascript
运行
复制
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显示单选按钮?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-25 01:56:18

这里有一个Symfony 3.4中的解决方案(使用Yes/No下拉菜单),可能会有所帮助:

在config.yml中

代码语言:javascript
运行
复制
imports:
    ...
    - { resource: easyAdmin.yml }

在easyadmin.yml中

代码语言:javascript
运行
复制
fields:
    ...
    - property: 'hasRoleAdmin'
      label: 'Is admin?'
      type: choice
      type_options:
        choices:
            'No': 'No'
            'Yes': 'Yes' 

在用户实体中:

代码语言:javascript
运行
复制
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;
}
票数 4
EN

Stack Overflow用户

发布于 2019-05-14 19:03:35

@johan-rm你所做的几乎是正确的。

事实上,您不能对角色使用单选按钮,因为角色(参见s)是多项选择域。您需要使用复选框(或多个选择)。

在您的代码中,唯一错误的部分是:multiple: false。如果您试图将一个数组映射到一个选择字段,那么您就是在尝试将一个数组映射到一个字符串,因此出现了错误。只需将multiple: false更改为multiple: true

这就是结果:

代码语言:javascript
运行
复制
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' }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52006043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档