Api-Platform:渴望加载子资源

时间:2018-06-14 07:41:27

标签: php rest symfony symfony4 api-platform.com

大家好我刚刚开始使用Api-Platform而且我在这个问题上遇到了几个小时。

我有一个Symfony4项目和两个实体:<html> <head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"> </head> <body> <nav class="navbar navbar-expand-sm"> <button class="navbar-toggler mr-2" type="button" data-toggle="collapse" data-target="#navbar"> <span class="navbar-toggler-icon"></span> </button> <span class="navbar-brand d-flex flex-fill">WIDE-LOGO-TEXT</span> <div class="navbar-collapse collapse" id="navbar"> <ul class="navbar-nav justify-content-center d-flex flex-fill"> <li class="nav-item"> <a class="nav-link">Home</a> </li> <li class="nav-item"> <a class="nav-link">Gallery</a> </li> <li class="nav-item"> <a class="nav-link">Services</a> </li> <li class="nav-item"> <a class="nav-link">Contact Us</a> </li> </ul> </div> <div class="d-flex flex-fill"><!--spacer--> </div> </nav> <div class="container-fluid"> <h5 class="text-center">--center--</h5> </div> </body> </html>&amp; Bill

比尔:

Abo

阿博:

/**
 * @ORM\Entity(repositoryClass="App\Repository\BillRepository")
 * @ApiResource
 */
class Bill {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="date", nullable=false)
     */
    private $date;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Abo", inversedBy="bills")
     * @ORM\JoinColumn
     * @ApiSubresource
     */
    private $abo;
}

当我现在调用此网址/** * @ORM\Entity(repositoryClass="App\Repository\AboRepository") * @ApiResource */ class Abo { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=50, nullable=false) */ private $name; /** * @var integer * * @ORM\Column(name="price", type="integer", nullable=false) */ private $price; /** * @ORM\OneToMany(targetEntity="App\Entity\Bill", mappedBy="abo") */ private $bills; } 时,我会收到这些数据:

/api/bills

但是我想要加载Abo数据而不是这个{ "@id": "/api/bills/14", "@type": "Bill", "id": 14, "date": "2018-03-08T00:00:00+00:00", "abo": "/api/abos/1" }, ... ,如下所示:

"abo": "/api/abos/1"

这是否可行,如果是,我该如何实现?

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:4)

您可以使用序列化组。确保您的关系字段$abo及其成员字段组已公开。

use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass="App\Repository\BillRepository")
 * @ApiResource(attributes={
 *   "normalization_context"={"groups"={"bill", "bill-abo", "abo"}}
 * })
 */
class Bill {

  ...

  /**
   * @ORM\ManyToOne(targetEntity="App\Entity\Abo", inversedBy="bills")
   * @ORM\JoinColumn
   * @ApiSubresource
   * @Groups("bill-abo")
   */
   private $abo;

   ...

}

class Abo {

    ...

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=50, nullable=false)
     * @Groups("abo")
     */
    private $name;

    ...
}

您可以在docs中阅读更多内容。