如何在 SonataAdminBundle 中获取当前管理员 class?
How in SonataAdminBundle get current admin class?
如何在 SonataAdminBundle 中
在不使用 AdminPool 的情况下获取当前管理员 class?
现在我正在尝试这样做
$entityClass = get_class($entity);
$adminClass = $this->adminPool->getAdminByClass($entityClass);
但是这个方法有个问题。如果该实体与多个 class 管理员相关联,则会抛出异常。
有没有办法找出管理服务应该处理当前路由的确切内容?
谢谢!
如果您为此实体的 class 注册了多个管理员,则无法为您选择正确的管理员。
您仍然可以使用方法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)
returns 是 Admin
而不是 class string
:您将变量命名为 $adminClass
这表明你造成了这种混淆。
另请注意,此处 Github 上存在一个未解决的问题:https://github.com/sonata-project/SonataAdminBundle/issues/3908 以确定当一个实体有多个管理员时能够定义默认管理员的方法,以便Pool:getAdminByClass()
方法不会抛出异常。似乎没有人对此足够关心来实现它,如果你愿意,请随时在那里做出贡献。
如何在 SonataAdminBundle 中 在不使用 AdminPool 的情况下获取当前管理员 class?
现在我正在尝试这样做
$entityClass = get_class($entity);
$adminClass = $this->adminPool->getAdminByClass($entityClass);
但是这个方法有个问题。如果该实体与多个 class 管理员相关联,则会抛出异常。 有没有办法找出管理服务应该处理当前路由的确切内容?
谢谢!
如果您为此实体的 class 注册了多个管理员,则无法为您选择正确的管理员。
您仍然可以使用方法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)
returns 是 Admin
而不是 class string
:您将变量命名为 $adminClass
这表明你造成了这种混淆。
另请注意,此处 Github 上存在一个未解决的问题:https://github.com/sonata-project/SonataAdminBundle/issues/3908 以确定当一个实体有多个管理员时能够定义默认管理员的方法,以便Pool:getAdminByClass()
方法不会抛出异常。似乎没有人对此足够关心来实现它,如果你愿意,请随时在那里做出贡献。