3

我将 FOSUser 与 SonataUser 和 SonataAdmin 一起使用。我还使用了 SonataEasyExtends 来创建 app/Application/Sonata/UserBundle,正如在将 FOS 与 Sonata 一起使用时的几个教程中所述。

我只是想从用户实体的管理表单中删除几个默认字段,例如社交(facebook、twitter、...)。

我试图通过放置来覆盖表单

#app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php

namespace Application\Sonata\UserBundle\Admin\Model;

use Sonata\UserBundle\Admin\Model\UserAdmin as UserAdmin;

class MyUserAdmin extends UserAdmin
{
    /**
     * {@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()
        ;

        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();
        }

        $formMapper
            ->with('Security')
                ->add('token', null, array('required' => false))
                ->add('twoStepVerificationCode', null, array('required' => false))
            ->end();
    }
}

我想我必须将它注册为服务,并告诉索纳塔默认使用它。

但我不知道该怎么做。

我至少在正确的轨道上吗?

4

2 回答 2

3

没错,只需指向您的新 UserAdmin 类:

#app/config/config.yml
sonata_user:
admin:
    user:
      class:      Application\Sonata\UserBundle\Admin\UserAdmin    

之后,您覆盖完整的configureFormFields()方法并省略字段。

但是还有一个remove()方法:

class UserAdmin extends SonataUserAdmin
{
    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    {
        parent::configureFormFields($formMapper);
        $formMapper
            ->remove('facebookUid');
    }
}

您可以对任何字段执行此操作。不幸的是,没有简单的 removeGroup('Social')方法——这可能是一种改进。

于 2014-08-13T08:53:08.030 回答
1

Sonata User Admin 的表单不会被自动覆盖。

根据Thomas Rabaix的说法,我们必须告诉奏鸣曲使用我们的新管理实例

#app/config/config.yml
services:
    vendor.admin.extens:
        class: Application\Sonata\ProductBundle\Admin\ProductAdmin
        tags:
            - { name: sonata.admin.extens, target: sonata.product.admin.product }
于 2012-07-11T09:29:53.137 回答