Search code examples
phpsymfonysonata

How in SonataAdminBundle get current admin class?


How in SonataAdminBundle get the current admin class without using AdminPool?

Now I'm trying to do it like this

    $entityClass = get_class($entity);
    $adminClass = $this->adminPool->getAdminByClass($entityClass);

But this method has a problem. If the entity is associated with several classes of the admin, an exception will be thrown. Is there a way to find out what exactly the admin service should handle the current route?

Thanks!


Solution

  • If you have multiple admins registered for this entity's class, nothing can choose the correct one for you.

    You can still get a specific admin with the method Pool::getAdminByAdminCode(string $code).

    For example, an usage for you could be:

    if ($entityClass === MultipleAdminRegisteredEntity::class) {
        $admin = $this->adminPool->getAdminById('specific_admin_id');
    } else {
        $entityClass = get_class($entity);
        $admin = $this->adminPool->getAdminByClass($entityClass);
    }
    

    Please pay attention to the fact that the Pool::getAdminByClass(string $class) returns an Admin and not a class string: you named your variable $adminClass which suggests you made this confusion.

    Also note that there is an open issue on Github here: https://github.com/sonata-project/SonataAdminBundle/issues/3908 to determine a way to be able define default admins when there are more than one admin for an entity, so that the Pool:getAdminByClass() method doesn't throw an exception. Nobody seems to have care enough about this to implement it, feel free to contribute there if you want.