Вы можете избавиться от свойств Sonata, расширив объект FOSUserBundle
напрямую, а не модель SonataUser User.
изменить объект, который ваш Пользователь распространяется на самом деле:
use Sonata\UserBundle\Model\User as BaseUser;
к следующему:
use FOS\UserBundle\Entity\User as BaseUser;
Затем, чтобы удалить ненужные свойства из форм и, возможно, добавить новый, переопределить сонатную класс UserAdmin по умолчанию :
1- Создайте класс администратора под названием UserAdmin в своем собственном пакете.
2- Откройте файл vendor/sonata-project/user-bundle/Admin/Model/UserAdmin.php и возьмите с него configureFormFields
. Вставьте его в свой собственный класс администратора и сохраните только нужные поля, удалив ненужные поля из базового построителя форм.
класс может выглядеть так:
use FOS\UserBundle\Model\UserManagerInterface;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Form\FormMapper;
class UserAdmin extends Admin // You can extends directly from SonataUserAdmin if it's easier for you
{
protected $userManager;
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
... The fields you keep ...
}
/**
* @param UserManagerInterface $userManager
*/
public function setUserManager(UserManagerInterface $userManager)
{
$this->userManager = $userManager;
}
/**
* @return UserManagerInterface
*/
public function getUserManager()
{
return $this->userManager;
}
}
3- Определить новый класс UserAdmin как сервис
services:
sonata.user.admin.user:
class: YourOwnAdminBundle\Admin\UserAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: %sonata.user.admin.groupname%, label: "User", label_catalogue: %sonata.user.admin.label_catalogue%", icon: "%sonata.user.admin.groupicon%"}
arguments:
- ~
- %sonata.user.admin.user.entity%
- %sonata.user.admin.user.controller%
calls:
- [setUserManager, ["@fos_user.user_manager"]]
- [setTranslationDomain, ["%sonata.user.admin.user.translation_domain%"]]
Затем адаптировать конфигурацию сонатной пользователя в config.yml:
sonata_user:
...
admin:
user:
class: YourOwnAdminBundle\Admin\UserAdmin
controller: SonataAdminBundle:CRUD
translation: SonataUserBundle
И должно быть хорошо.
Посмотрите на this similar question в случае, если я что-то забыл или вам нужно больше.
Не используйте только SonataUserBundle вместо FOSUserBundle. – 1ed
Возможный дубликат [Как удалить поля с учетной записи пользователя пользователя администратора страницы Sonata User Bundle?] (Http://stackoverflow.com/questions/30690298/how-to-remove-fields-from-the-admin-user- create-page-of-sonata-user-bundle) –