使用 Sonata admin 导出用户角色

Export user roles with Sonata admin

我在 Symfony 4 中使用 SonataAdminFosUserBundle。 我想使用导出功能以 CSV 格式导出整个用户的数据,JSON ... 触发导出时,文件中的角色列为空或为空。

在 UserAdmin class 中,我通过调用特定方法覆盖了 getExportFields 函数,以获取此 post 中解释的角色。 但是没用。

以我为例:

 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);
}

在这种情况下,当我触发导出时,我的网络浏览器显示错误

'website is inaccessible' with no error in the dev.log.

当我在getExportFields函数中删除'roles' => 'rolesExported'时,导出很好触发。

我怀疑 __toString() 调用有问题。

尽管您用作灵感的 post 明确表示要导出集合,但我认为您可能想要导出数组。

因为我不知道你的 $role 对象的类型,出于调试目的,首先将 $role->__toString() 替换为 gettype($role),所以该行是: $exportedRoles[] = gettype($role);

我在这里看到三种情况:

  1. object 或对于多个角色 object - object - ...,在这种情况下,您应该 select 一个角色方法 returns 一个适当的字符串或在那个地方创建一个, 比如 $exportedRoles[] = $role->getName();
  2. string 或多个角色 string - string - ...,在这种情况下,您的“真实”角色只是一个数组,您可以将函数的内容替换为 return implode(' - ', $this->getRealRoles());
  3. array 或多个角色 array - array - ...,在这种情况下,每个角色都有一个数组,而那些不提供 __toString。 Select 构造导出角色的方法,如$exportedRoles[] = $role['name'];