2016-05-27 8 views
1

FOS USERバンドルの管理パネルを作成するためにsonata adminを使用しています。そして、私は '役割'のためにドロップダウンを使用する必要があります。ソナタのFos User bundle rolesフィールドのドロップダウンを使用します。

これは私の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, 
)); 

などです。

私はすぐにそれを投稿しますので、フィールドマッピングがどのようにフレームワークによって取り組まれるかについて私がここで気づいていないので、手動でデータを操作する必要があります。

私が示唆できることは、自動マジックが起こらない場合は、その状況を処理するためにcustom FormTypeを書き込むことです。

関連する問題