Вы можете избавиться от свойств Sonata, расширив сущность FOSUserBundle
напрямую, а не модель пользователя SonataUser.
измените сущность, которую ваш пользователь расширяет на самом деле:
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%"]]
Затем адаптируйте конфигурацию пользователя sonata в config.yml:
sonata_user:
...
admin:
user:
class: YourOwnAdminBundle\Admin\UserAdmin
controller: SonataAdminBundle:CRUD
translation: SonataUserBundle
И это должно быть хорошо.
Посмотрите на этот похожий вопрос на случай, если я что-то забыл или вам нужно больше.
person
Tjaari76
schedule
28.02.2016