我正在尝试修改User
实体的默认管理员。
只需要实际从表单中删除某些字段即可。
我认为this doc对我来说将是有用的。
现在,我已经创建了该管理员,并尝试覆盖默认的User
一个。
应用程序/应用程序/奏鸣曲/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]
但是我越来越
我究竟做错了什么 ?
最佳答案
万一有一天有人来找这个,我可以通过覆盖UserAdmin.php来使它工作
将以下行添加到app/AppKernel.php的registerBundle方法中
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// other bundle declarations
new Sonata\UserBundle\SonataUserBundle(),
);
}
现在将sonata.user.admin.user.class参数的值设置为在FOSUserBundle安装期间创建的用户实体的FQCN。
//app/config/config.yml
parameters:
#....
sonata.user.admin.user.entity: YourVendor\YourBundle\Entity\User
现在创建一个扩展默认UserAdmin类的类,并重写configureShowFields,configureFormFields,configureDatagridFilters和configureListFields方法以添加所需的用户管理字段。以下是示例扩展UserAdmin类,该类基于FOSUserBundle文档中创建的基础用户实体。
<?php
//src/YourVendor/YourBundle/Admin/UserAdmin.php
namespace YourVendor\YourBundle\Admin;
use Sonata\UserBundle\Admin\Model\UserAdmin as BaseUserAdmin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use FOS\UserBundle\Model\UserManagerInterface;
use Sonata\AdminBundle\Route\RouteCollection;
class UserAdmin extends BaseUserAdmin
{
/**
* {@inheritdoc}
*/
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->with('General')
->add('username')
->add('email')
->end()
// .. more info
;
}
/**
* {@inheritdoc}
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
->add('username')
->add('email')
->add('plainPassword', 'text', array('required' => false))
->end()
// .. more info
;
if (!$this->getSubject()->hasRole('ROLE_SUPER_ADMIN')) {
$formMapper
->with('Management')
->add('roles', 'sonata_security_roles', array(
'expanded' => true,
'multiple' => true,
'required' => false
))
->add('locked', null, array('required' => false))
->add('expired', null, array('required' => false))
->add('enabled', null, array('required' => false))
->add('credentialsExpired', null, array('required' => false))
->end()
;
}
}
/**
* {@inheritdoc}
*/
protected function configureDatagridFilters(DatagridMapper $filterMapper)
{
$filterMapper
->add('id')
->add('username')
->add('locked')
->add('email')
;
}
/**
* {@inheritdoc}
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('username')
->add('email')
->add('enabled', null, array('editable' => true))
->add('locked', null, array('editable' => true))
->add('createdAt')
;
if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) {
$listMapper
->add('impersonating', 'string', array('template' => 'SonataUserBundle:Admin:Field/impersonating.html.twig'))
;
}
}
}
现在在app/config/config.yml中将sonata.user.admin.user.class的值设置为已创建的UserAdmin类的FQCN,例如
parameters:
sonata.user.admin.user.class: YourVendor\YourBundle\Admin\UserAdmin
如果一切设置正确,您将在admin/dashboard页面中看到一个新用户行。所有用户操作均应按预期进行。
关于php - SonataUser-扩展管理员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11430375/