在我的应用中,我有用户。 每个用户都有一个角色(管理员,测试人员......) 每个角色可以有多个权限(主页视图,联系页面视图......)
所以,我有一个ManyToMany关系
因为我想从角色的权限和权限中获取角色,所以我有双向关系。
我想要的只是选择一个具有角色的权限
我的问题:当我获得权限时,它会获得每个角色及其角色的权限......
结果开始示例:
{
"id": 4,
"nom": "Accès au backoffice",
"slug": "page-backoffice",
"role": [
{
"id": 1,
"libelle": "Administrateur",
"permission": [
{
"id": 3,
"nom": "Visualisation du stock global",
"slug": "page-visu-stock-global",
"role": [
{
"id": 2,
"libelle": "Responsable d'exploitation",
"permission": [
{
.......
我想要的是:
{
"id": 4,
"nom": "Accès au backoffice",
"slug": "page-backoffice",
"role": [
{
"id": 1,
"libelle": "Administrateur",
"slug": "administrateur"
},
{
"id": 2,
"libelle": "Responsable d'exploitation",
"slug": "responsable-exploitation"
},
....
我该怎么做?
我的orm文件关系详情: Permissions.orm.yml:
manyToMany:
role:
targetEntity: Role
cascade: { }
fetch: LAZY
mappedBy: permission
inversedBy: null
joinTable: null
orderBy: null
role.orm.yml:
manyToMany:
permission:
targetEntity: Permissions
cascade: { }
fetch: LAZY
mappedBy: null
inversedBy: role
joinTable:
name: role_permission
joinColumns:
-
name: role_id
referencedColumnName: id
inverseJoinColumns:
-
name: permission_id
referencedColumnName: id
orderBy: null
感谢您的帮助
答案 0 :(得分:1)
大多数情况下,您不希望一次将所有实体暴露给您的api,尤其是在将相关实体暴露给其他实体时。
序列化组允许您选择要在api中公开的属性。通过这种方式,您可以避免在暴露相关实体时进入深层(例如,暴露其权限的角色暴露其角色,将其权限暴露给无限及更远)。
Symfony有一些关于what are serialization groups和how to enable and use serialization groups的文档。
答案 1 :(得分:-1)
以下是如何操作的示例:
use JMS\Serializer\Annotation\MaxDepth;
class User
{
private $username;
/** @MaxDepth(1) */
private $friends;
/** @MaxDepth(2) */
private $posts;
}
class Post
{
private $title;
private $author;
}
对于控制器:
use JMS\Serializer\SerializationContext;
$serializer->serialize($data, 'json', SerializationContext::create()->enableMaxDepthChecks());
注意在序列化过程中有大约20个注释关键字来“过滤”数据。
示例来源: