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

Posted

技术标签:

【中文标题】SonataAdminBundle 如何获取当前的管理类?【英文标题】:How in SonataAdminBundle get current admin class? 【发布时间】:2018-05-19 01:55:02 【问题描述】:

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

现在我正在尝试这样做

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

但是这个方法有问题。如果实体与管理员的多个类相关联,则会抛出异常。 有没有办法找出管理服务应该处理当前路由的具体内容?

谢谢!

【问题讨论】:

我忘了说,我需要 Voter 里面的这个功能 【参考方案1】:

如果您为该实体的班级注册了多个管理员,则没有什么可以为您选择正确的。

您仍然可以使用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,这表明您造成了这种混淆。

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

【讨论】:

以上是关于SonataAdminBundle 如何获取当前的管理类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SonataAdminBundle 中使用角色

如何仅在子管理员(SonataAdminBundle)中删除路由?

SonataAdminBundle 如何在列表视图中对列的值求和

如何添加链接以在 SonataAdminBundle 中的关系字段上显示关系实体的操作

如何通过 SonataAdminBundle (Symfony) 管理 Doctrine ORM 类表继承?

将自己的操作添加到 SonataAdminBundle 下拉菜单