使用 Sonata 管理员导出用户角色
Posted
技术标签:
【中文标题】使用 Sonata 管理员导出用户角色【英文标题】:Export user roles with Sonata admin 【发布时间】:2020-10-22 17:30:55 【问题描述】:我在 Symfony 4 中使用 SonataAdmin
和 FosUserBundle
。
我想使用导出功能以 CSV、JSON 格式导出整个用户的数据......
触发导出时,文件中的角色列为空或为空。
在 UserAdmin 类中,我通过调用特定方法覆盖了 getExportFields 函数,以获取本文中解释的角色。 Sonata admin export fields with collection fields 但它不起作用。
以我为例:
public function getExportFields()
return [
'id',
'username',
'roles' => 'rolesExported'
];
在我的用户实体中:
public function getRolesExported()
$exportedRoles = [];
foreach ($this->getRealRoles() as $role)
$exportedRoles[] = $role->__toString();
return $this->rolesExported = implode(' - ', $exportedRoles);
在这种情况下,当我触发导出时,我的网络浏览器会显示错误
“网站无法访问”,dev.log 中没有错误。
当我在getExportFields
函数中删除'roles' => 'rolesExported'
时,导出触发良好。
【问题讨论】:
你做了一些事情,你不想显示代码,你使用了不同的 symfony 版本,那个帖子已经有 2 年了,可能有很多原因为什么它没有工作了。请显示一些代码,并简要说明“它不起作用”的确切含义! (可能意味着从“错误”到“错误输出”到“根本没有效果”) 我添加了一些细节来理解这个问题。希望它会有所帮助。 附带说明:您应该真正找出错误所在的位置。你是在合适的网络服务器上运行它吗?你在开发环境中运行这个吗?在 web 服务器上,php 日志可能在 [symfony]/var/log/(prod/dev).log 或 /var/log/php_errors(.log) 或 /var/log/php-fpm/errors 中。日志或其他一些通用日志文件。 【参考方案1】:我怀疑__toString()
调用会导致问题。
虽然您用作灵感的帖子明确表示要导出集合,但我认为您可能想要导出数组。
由于我不知道您的 $role
对象的类型,出于调试目的,首先将 $role->__toString()
替换为 gettype($role)
,因此该行是:
$exportedRoles[] = gettype($role);
我在这里看到三个案例:
object
或多个角色object - object - ...
,在这种情况下,您应该选择一种返回适当字符串的 Role 方法或在该位置创建一个,例如 $exportedRoles[] = $role->getName();
string
或多个角色 string - string - ...
,在这种情况下,您的“真实”角色只是一个数组,您可以将函数的内容替换为 return implode(' - ', $this->getRealRoles());
array
或多个角色array - array - ...
,在这种情况下,每个角色都有一个数组,而那些不提供__toString
。选择构造导出角色的方法,如$exportedRoles[] = $role['name'];
【讨论】:
谢谢,现在可以使用了。我在 csv 输出中有角色数据。 @chaillouvincent 是哪一个? 角色对象是字符串(在包中记录得不是很好)。所以我删除了 toString() 调用,之后一切正常。以上是关于使用 Sonata 管理员导出用户角色的主要内容,如果未能解决你的问题,请参考以下文章