Поле выбора типа Symfony Easyadmin для ролей - PullRequest
0 голосов
/ 24 августа 2018

Я использую easyadmin, я хочу, чтобы в поле «роль» отображался выбор ролей в поле типа «радио», но возникает ошибка (преобразование массива в строку) этого типа (см. Изображение ниже):

Примечание: преобразование массива в строку

вот мой конфиг:

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?

спасибо заранее

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

@ johan-rm то, что вы сделали, было почти правильно.

Фактически, вы не можете использовать переключатели для ролей, потому что роли (см. 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' }
0 голосов
/ 24 августа 2018

Вот решение в 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;
}
...