简体   繁体   中英

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!

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.

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