2016-05-27 5 views
1

Я использую sonata admin для создания панели администратора для пользователей FOS USER. И мне нужно использовать раскрывающийся список для «ролей».Использовать выпадающее меню для Fos User bundle role field in sonata admin

Это мой админ класс,

<?php 

namespace AdminBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Show\ShowMapper; 

class UserAdmin extends Admin { 

    protected function configureFormFields(FormMapper $formMapper) { 
     $formMapper->add('name', 'text'); 
     $formMapper->add('surname', 'text'); 
     $formMapper->add('username', 'text'); 
     $formMapper->add('email', 'text'); 
     $formMapper->add('telephone', 'text'); 
     $formMapper->add('password', 'text'); 
     $formMapper->add('roles', 'choice', array(
      'choices' => array(
       'Admin' => 'a:1:{i:0;s:10:"ROLE_ADMIN";}', 
       'User' => 'a:0:{}', 
      ), 
      'choices_as_values' => true, 
     )); 
    } 

Но я получаю эту ошибку,

Примечание: Массив для преобразования строки 500 Внутренняя ошибка сервера - ContextErrorException

Я думаю, что это часть ведьмы дает ошибку,

 $formMapper->add('roles', 'choice', array(
      'choices' => array(
       'Admin' => 'a:1:{i:0;s:10:"ROLE_ADMIN";}', 
       'User' => 'a:0:{}', 
      ), 
      'choices_as_values' => true, 
     )); 

ответ

1

Этот a:1:{i:0;s:10:"ROLE_ADMIN";} действительно представляет собой массив (сериализованный). Таким образом, вы должны представить строковое представление об этом, изменив его на

$formMapper->add('roles', 'choice', array(
    'choices' => array(
     'Admin' => 'ROLE_ADMIN', 
     'User' => '', 
     ), 
    'choices_as_values' => true, 
)); 

или что-то в этом роде.

BTW, как только вы опубликуете это, вам может потребоваться манипулировать вашими данными вручную, поскольку я не знаю, как это сопоставление полей будет решаться каркасом.

Что я могу предложить, если автоматическая магия не существует, это написать custom FormType, чтобы справиться с этой ситуацией.