使用 Sonata admin 导出用户角色
Export user roles with Sonata admin
我在 Symfony 4 中使用 SonataAdmin
和 FosUserBundle
。
我想使用导出功能以 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'
时,导出很好触发。
- SonataAdmin 版本:3.35
- FosUserBundle 版本:2.1.2
- Symfony 版本:4.3.2(我知道我需要更新它)
我怀疑 __toString()
调用有问题。
尽管您用作灵感的 post 明确表示要导出集合,但我认为您可能想要导出数组。
因为我不知道你的 $role
对象的类型,出于调试目的,首先将 $role->__toString()
替换为 gettype($role)
,所以该行是:
$exportedRoles[] = gettype($role);
我在这里看到三种情况:
object
或对于多个角色 object - object - ...
,在这种情况下,您应该 select 一个角色方法 returns 一个适当的字符串或在那个地方创建一个, 比如 $exportedRoles[] = $role->getName();
string
或多个角色 string - string - ...
,在这种情况下,您的“真实”角色只是一个数组,您可以将函数的内容替换为 return implode(' - ', $this->getRealRoles());
array
或多个角色 array - array - ...
,在这种情况下,每个角色都有一个数组,而那些不提供 __toString
。 Select 构造导出角色的方法,如$exportedRoles[] = $role['name'];
我在 Symfony 4 中使用 SonataAdmin
和 FosUserBundle
。
我想使用导出功能以 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'
时,导出很好触发。
- SonataAdmin 版本:3.35
- FosUserBundle 版本:2.1.2
- Symfony 版本:4.3.2(我知道我需要更新它)
我怀疑 __toString()
调用有问题。
尽管您用作灵感的 post 明确表示要导出集合,但我认为您可能想要导出数组。
因为我不知道你的 $role
对象的类型,出于调试目的,首先将 $role->__toString()
替换为 gettype($role)
,所以该行是:
$exportedRoles[] = gettype($role);
我在这里看到三种情况:
object
或对于多个角色object - object - ...
,在这种情况下,您应该 select 一个角色方法 returns 一个适当的字符串或在那个地方创建一个, 比如$exportedRoles[] = $role->getName();
string
或多个角色string - string - ...
,在这种情况下,您的“真实”角色只是一个数组,您可以将函数的内容替换为return implode(' - ', $this->getRealRoles());
array
或多个角色array - array - ...
,在这种情况下,每个角色都有一个数组,而那些不提供__toString
。 Select 构造导出角色的方法,如$exportedRoles[] = $role['name'];