简体   繁体   中英

Different lists for one model in sonata admin bundle

How can I create two different lists for one model? In my case I have one model User. And for this model in my dashboard I must have two lists: Members and Admins. I create for members:

sonata.admin.members:
    class: Project\AdminBundle\Admin\MemberAdmin
    tags:
      - { name: sonata.admin, manager_type: orm, model_manager: sonata.admin.manager.project, group: Members, label: Members}
    arguments: [null, %fos_user.model.user.class%, SonataAdminBundle:CRUD]
    calls:
      - [setTranslationDomain, [ProjectUserBundle]]

and for admins:

sonata.admin.user:
    class: Project\UserBundle\Admin\UserAdmin
    tags:
      - { name: sonata.admin, manager_type: orm, model_manager: sonata.admin.manager.project, group: Admins, label: Admin Users}
    arguments: [null, %fos_user.model.user.class%, ProjectUserBundle:CRUD]
    calls:
      - [setTranslationDomain, [ProjectUserBundle]]

So, I have two tabs in admin panel, but it has one url, and work only with one Admin class.

Any ideas?

在管理类中设置两个参数baseRoutePattern和baseRouteName

I did a similar thing to this and used Doctrine Single Table Inheritance ( http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance ) on my base user class to create separate Admin and WebUser entities.

Then it's really straight forward to just use Sonata Admin as per the examples without any tweaks required to manage the two sets in different lists.

For Example First Admin Class:

<?php
namespace App\PreorderBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class UserAdmin extends Admin
{
    protected $baseRouteName = 'preorder_user';
    protected $baseRoutePattern = 'preorder_user';
    protected function configureFormFields(FormMapper $formMapper)

Second Admin Class:

namespace App\SecurityBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class UserAdmin extends Admin
{
    protected $baseRoutePattern = 'user';
    protected $baseRouteName = 'user';


    protected function configureFormFields(FormMapper $formMapper)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM