Api-Platform: готовая загрузка подресурса

Привет, ребята. Я только начал использовать Api-Platform и застрял в этой проблеме на несколько часов.

У меня есть проект Symfony4 и две организации: 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;
}

Когда я сейчас называю этот URL, /api/billsПолучу эти данные:

{
"@id": "/api/bills/14",
"@type": "Bill",
"id": 14,
"date": "2018-03-08T00:00:00+00:00",
"abo": "/api/abos/1"},
...

Но вместо этого "abo": "/api/abos/1" Я хочу, чтобы данные Abo уже были загружены, что-то вроде этого:

"abo": {
"name": "TestAbo",
"price": 25
}

Возможно ли это, и если да, то как мне этого добиться?

Спасибо за ваше время и помощь!

2

Решение

Вы можете использовать группы сериализации для этого. Убедитесь, что ваше поле отношения $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;

...
}

Вы можете прочитать больше в документы.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector