在 sonata admin 中使用 Fos User bundle roles 字段的下拉列表
Use dropdown for Fos User bundle roles field in sonata admin
我正在使用 sonata admin 为 FOS USER bundle 用户创建一个管理面板。我需要为 'roles' 字段使用下拉列表。
这是我的管理员 class,
<?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,
));
}
但是我遇到了这个错误,
Notice: Array to string conversion 500 Internal Server Error -
ContextErrorException
我认为这是 出错的部分,
$formMapper->add('roles', 'choice', array(
'choices' => array(
'Admin' => 'a:1:{i:0;s:10:"ROLE_ADMIN";}',
'User' => 'a:0:{}',
),
'choices_as_values' => true,
));
这个a:1:{i:0;s:10:"ROLE_ADMIN";}
确实是一个数组(序列化)。所以你必须给出一个字符串表示,将其更改为
$formMapper->add('roles', 'choice', array(
'choices' => array(
'Admin' => 'ROLE_ADMIN',
'User' => '',
),
'choices_as_values' => true,
));
或类似的东西。
顺便说一句,一旦您 post 知道了,您可能需要手动操作数据,因为我在这里不知道框架将如何处理该字段映射。
如果没有自动魔术发生,我可以建议的是编写您的 custom FormType 来处理这种情况。
我正在使用 sonata admin 为 FOS USER bundle 用户创建一个管理面板。我需要为 'roles' 字段使用下拉列表。
这是我的管理员 class,
<?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,
));
}
但是我遇到了这个错误,
Notice: Array to string conversion 500 Internal Server Error - ContextErrorException
我认为这是 出错的部分,
$formMapper->add('roles', 'choice', array(
'choices' => array(
'Admin' => 'a:1:{i:0;s:10:"ROLE_ADMIN";}',
'User' => 'a:0:{}',
),
'choices_as_values' => true,
));
这个a:1:{i:0;s:10:"ROLE_ADMIN";}
确实是一个数组(序列化)。所以你必须给出一个字符串表示,将其更改为
$formMapper->add('roles', 'choice', array(
'choices' => array(
'Admin' => 'ROLE_ADMIN',
'User' => '',
),
'choices_as_values' => true,
));
或类似的东西。
顺便说一句,一旦您 post 知道了,您可能需要手动操作数据,因为我在这里不知道框架将如何处理该字段映射。
如果没有自动魔术发生,我可以建议的是编写您的 custom FormType 来处理这种情况。