SonataAdminBundle如何获得当前的管理类?

时间:2017-12-05 11:54:25

标签: php symfony sonata

如何使用SonataAdminBundle 在不使用AdminPool的情况下获取当前的管理类?

现在我正在尝试这样做

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

但这种方法有问题。如果实体与管理员的多个类关联,则将引发异常。 有没有办法找出管理服务应该处理当前路由的确切内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您为此实体的班级注册了多个管理员,则无法为您选择正确的管理员。

您仍然可以使用Pool::getAdminByAdminCode(string $code)方法获得特定的管理员。

例如,您的用法可能是:

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

请注意Pool::getAdminByClass(string $class)返回Admin而不是string类的事实:您将变量命名为$adminClass,这表示您造成了这种混淆。< / p>

另请注意,Github上存在一个未解决的问题:https://github.com/sonata-project/SonataAdminBundle/issues/3908以确定在实体有多个管理员时能够定义默认管理员的方法,以便Pool:getAdminByClass()方法不会抛出异常。似乎没有人足够关心这一点来实现它,如果你愿意,可以随意贡献。