使用 Sonata 管理员导出用户角色

Posted

技术标签:

【中文标题】使用 Sonata 管理员导出用户角色【英文标题】:Export user roles with Sonata admin 【发布时间】:2020-10-22 17:30:55 【问题描述】:

我在 Symfony 4 中使用 SonataAdminFosUserBundle。 我想使用导出功能以 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'时,导出触发良好。

SonataAdmin 版本:3.35 FosUserBundle 版本:2.1.2 Symfony 版本:4.3.2(我知道我需要更新它)

【问题讨论】:

你做了一些事情,你不想显示代码,你使用了不同的 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 管理员导出用户角色的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin - 只允许显示登录用户创建的内容

企业实践用户邮箱导入/导出(第1部分)

在 FOSUserBundle 中清除组和角色的使用

Sonata 管理员/用户:“类不存在”(ReflectionException)

在 Sonata symfony 4 中创建管理员用户

EMS导入导出邮箱