我正在尝试修改 User
实体的默认管理员 .
只需要从表单中删除某些字段 .
我想this doc对我来说将是有用的 .
现在我已创建此管理员并尝试覆盖默认的 User
一个 .
app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php
namespace Application\Sonata\UserBundle\Admin\Model;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\UserBundle\Admin\Model\UserAdmin as BaseType;
class UserAdmin extends BaseType
{
/**
* {@inheritdoc}
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('username')
->add('groups')
->add('enabled')
;
}
/**
* {@inheritdoc}
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
->add('username')
->add('email')
->add('plainPassword', 'text', array('required' => false))
->end()
->with('Groups')
->add('groups', 'sonata_type_model', array('required' => false))
->end()
->with('Profile')
->add('firstname', null, array('required' => false))
->add('lastname', null, array('required' => false))
->end()
;
}
/**
* {@inheritdoc}
*/
public function preUpdate($user)
{
$this->getUserManager()->updateCanonicalFields($user);
$this->getUserManager()->updatePassword($user);
}
/**
* @return UserManagerInterface
*/
public function getUserManager()
{
return $this->userManager;
}
}
app/config/config.yml
services:
sonata.admin.extension:
class: Application\Sonata\UserBundle\Admin\Model\UserAdmin
tags:
- { name: sonata.admin.extension, target: sonata.user.admin.user }
arguments: [null, Sonata\UserBundle\Entity\User, SonataUserBundle:UserAdmin]
但我得到了
无法导入资源“/ var / www / Symfony / app / config / . ”来自“/var/www/Symfony/app/config/routing.yml” . ... ErrorException:Catchable致命错误:传递给Sonata \ AdminBundle \ Admin \ Admin :: addExtension()的参数1必须是Sonata \ AdminBundle \ Admin \ AdminExtensionInterface的实例,Application \ Sonata \ UserBundle \ Admin \ Model \的实例UserAdmin给出,在3139行的/var/www/Symfony/app/cache/dev/appDevDebugProjectContainer.php中调用,并在/var/www/Symfony/vendor/bundles/Sonata/AdminBundle/Admin/Admin.php第2359行中定义
我究竟做错了什么 ?
5 回答
在config.yml中,添加以下内容:
万一有人会在某一天看到这个,我通过覆盖UserAdmin.php来实现这一点
将以下行添加到app / AppKernel.php的registerBundle方法中
现在将sonata.user.admin.user.class参数的值设置为在FOSUserBundle设置期间创建的User实体的FQCN .
现在创建一个扩展默认UserAdmin类的类,并覆盖configureShowFields,configureFormFields,configureDatagridFilters和configureListFields方法以添加所需的用户管理字段 . 以下是示例扩展UserAdmin类,它基于在FOSUserBundle文档中创建的裸骨用户实体 .
现在将sonata.user.admin.user.class的值设置为app / config / config.yml中创建的UserAdmin类的FQCN,例如
如果一切设置正确,您将在管理员/仪表板页面中看到新用户行 . 所有用户操作都应按预期工作 .
更改服务定义中的标记
对于Symfony 2.1的相同修复,您需要像这样为Sonata bundle指定自定义UserAdmin类
另请查看Sonata UserBundle documentation以获取更多选项
您收到此错误,因为您正在尝试创建管理扩展,并且您的类未实现AdminExtensionInterface . 您还可以扩展实现接口的抽象AdminExtension类 .
这在Sonata Admin Bundle的文档中有明确定义 - 扩展:http://sonata-project.org/bundles/admin/master/doc/reference/extensions.html