2016-02-28 1 views
2

Я создаю новый проект, используя Symfony 2.7.x и Sonata Admin 2.3.x plus Sonata User. По умолчанию Sonata добавляет кучу бесполезных полей, и я хочу, чтобы мой объект был как можно более чистым. Поэтому мой первый вопрос:Как переопределить свойства и формы объектов SonataUser?

  • Можно ли переопределить объекты пользователя Sonata, чтобы получить удовольствие от некоторых бесполезных свойств? Как?

Теперь, как вторая часть вопроса и связанная с ним, я хочу создать или использовать свою собственную форму для добавления новых пользователей и/или групп, потому что по умолчанию я не могу добавлять роли. Смотрите изображение ниже, чтобы увидеть, что я имею в виду:

Sonata Group Add

я должен иметь возможность добавлять новые динамические роли оттуда, и я не могу.

  • Возможно ли это? Как? Любое обходное решение?

Я взглянул на Github here и Документы here, но не смог найти ничего полезного. Какие-нибудь советы?

+0

Не используйте только SonataUserBundle вместо FOSUserBundle. – 1ed

+0

Возможный дубликат [Как удалить поля с учетной записи пользователя пользователя администратора страницы Sonata User Bundle?] (Http://stackoverflow.com/questions/30690298/how-to-remove-fields-from-the-admin-user- create-page-of-sonata-user-bundle) –

ответ

2

Вы можете избавиться от свойств 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 в случае, если я что-то забыл или вам нужно больше.

-1

Насколько я знаю, вам не нужно ничего делать с объектными свойствами SonataUserBundle, но вы можете отредактировать Model\User.php SonataUserBundle, если вы действительно хотите удалить некоторые из свойств, которые вы не будете нуждающихся; Вы должны быть осторожны, поскольку свойства, которые вы удалите, могут повлиять на некоторые формы или функции, связанные с этими свойствами.

+0

Я не должен, но хочу, потому что администратору не нужно иметь Facebook или Twitter или те свойства, которые из-за того, что я хочу их удалить, поскольку они совершенно бесполезны. С другой стороны, вы не должны редактировать 'Model \ User.php', так как это часть пакета, и в следующий раз при запуске' composer update' у вас могут возникнуть проблемы. – ReynierPM

+0

Вы можете просто использовать FOSUserBundle и расширить свой собственный UserBundle, на мой взгляд, это намного проще, но вам все равно придется создавать некоторые функции из Sonata. Также почему нижняя часть? –

+0

Потому что ваш ответ завершен неправильно, и я не понимаю ваше сообщение. Прочтите документы пакета, и вы увидите, почему downvote – ReynierPM