-->

重写用户管理表(Overriding the User Admin Form)

2019-07-30 07:59发布

我试图重写SonataUser/Admin/Model/UserAdminconfigureFormFields()因为我需要从管理表单中删除一些默认的领域。 所以我复制该文件vendor/bundles/Sonata/UserBundle/Admin/Model/UserAdmin.php在我捆绑app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php和修改它。 然后宣布它作为一项服务:

# app/application/Sonata/UserBundle/Resources/config/services.yml
services:
    application_user.registration.form.type:
        class: Application\Sonata\UserBundle\Admin\Model\UserAdmin
        arguments: [%sonata_user.model.user.class%]
        tags:
            - { name: form.type, alias: application_user_admin }

现在的问题:我做对吗? 我怎么能告诉奏鸣曲管理员可以使用它?

Answer 1:

首要类应该在config.yml进行设置:

# app/config/config.yml
sonata_user:
  admin:
    user:
      class:      MyCompany\UserBundle\Admin\Model\UserAdmin

扩展原有UserAdmin:

namespace MyCompany\UserBundle\Admin\Model;

use Sonata\AdminBundle\Form\FormMapper;

class UserAdmin extends \Sonata\UserBundle\Admin\Model\UserAdmin
{

    protected function configureFormFields(FormMapper $formMapper)
    {
        // new logic
    }

}

当然,改变类的名称MyCompany\UserBundle\Admin\Model\UserAdmin以反映您的束状结构。



Answer 2:

这是一个更好的做法是让你的包在src目录下,而不是:(请参阅创建束段 )。 在这种情况下,如果使用的是简单的延伸,确保使用--dest=src以产生的src /应用程序命名空间内的软件包。

php app/console sonata:easy-extends:generate SonataUserBundle --dest=src

通过创建你的首要包src/Application/Sonata/UserBundle和注册供应商捆绑作为父母,你就不必创建一个新的服务。 这说明你如何正确地重写包: 压倒一切的捆绑 ,并应为您节省大量的时间。

不要忘了创建要在相同的位置,你的父母捆绑覆盖文件。 在你的情况,你就必须复制粘贴SonataUser/Admin/Model/UserAdmin.php从供应商到你的包src/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php并修改它,如你所愿。 这就是为什么压倒一切的束可以如此有用。



文章来源: Overriding the User Admin Form