为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 5 API 填充相关对象实体

Symfony 5 API 填充相关对象实体

PHP
达令说 2023-07-15 15:35:15
我正在尝试使用 Symfony 5 创建一个简单的网络应用程序。我正在使用API。目前,当调用某个端点时,它仅显示相关链接的 IRI 链接:我需要显示相关实体对象本身;如果我得到Item端点,相关实体Program应该返回:{    "id": 1,    "program": {        "id": 1,        "name": "First program"    },    "description": "fgdfg",    "comment": "dfgdfg"{因此,该表的外观如下:我认为设置子资源就足以获取对象,但事实并非如此:在InventoryItem实体配置属性@ApiSubresource的注解中Program:/** * @ORM\ManyToOne(targetEntity=Program::class, inversedBy="inventoryItems") * @ORM\JoinColumn(nullable=false) * @ApiSubresource */private $program;在resources.yaml文件中我配置了子资源:App\Entity\InventoryItem:   properties:       program:           subresource:               resourceClass: 'App\Entity\Program'               collection: true这仍然返回 IRI 而不是对象,唯一改变的是现在我可以访问此 URL 中当前对象的相关实体:http://localhost:8000/api/inventory_items/1/program.json。关于如何返回相关实体对象本身而不是 IRI URL 有什么想法吗?
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您正在搜索序列化您的商品。所以我想这更多的是序列化问题而不是子资源问题。我认为你应该使用序列化组而不是子资源。

SOLUTION1序列化嵌入关系

“嵌入关系”提供了书籍和作者的示例。

<?php

// api/src/Entity/Item.php


namespace App\Entity;


use ApiPlatform\Core\Annotation\ApiResource;

use Symfony\Component\Serializer\Annotation\Groups;


/**

 * @ApiResource(normalizationContext={"groups"={"item"}})

 */

class Item

{

    /**

     * @Groups({"item"})

     */

    public $description;


    /**

     * @Groups({"item"})

     */

    public $comment;


    /**

     * @Groups({"item"})

     */

    public $program;


    // ...

}


// api/src/Entity/Person.php


namespace App\Entity;


use ApiPlatform\Core\Annotation\ApiResource;

use Symfony\Component\Serializer\Annotation\Groups;


/**

 * @ApiResource

 */

class Person

{

    /**

     * ...

     * @Groups("item") <=== This is item, not program but you can have two groups

     */

    public $name;


    // ...

}

SOLUTION2混合子资源和序列化组

这个示例应该可以工作,但是(如果需要子资源)您也可以混合子资源和序列化,但在您的情况下,我认为第一个解决方案是最好的。


查看完整回答
反对 回复 2023-07-15
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号