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

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

现在我正在尝试这样做

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

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

谢谢!

【问题讨论】:

  • 我忘了说,我需要 Voter 里面的这个功能

标签: php symfony sonata


【解决方案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() 方法不会抛出一个例外。似乎没有人对此给予足够的关注来实现它,如果您愿意,请随时在那里做出贡献。

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2011-02-21
    • 2023-01-10
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多