Лучшая практика для возврата пользовательских JSON на API-платформу - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу обновить свой существующий API (созданный с помощью FOSRest).

У меня есть множество маршрутов, которые возвращают пользовательские объекты JSON, отличные от моих сущностей.

Например, у меня естьOffer сущность

<?php
// api/src/Entity/Offer.php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * An offer from my shop - this description will be automatically extracted form the PHPDoc to document the API.
 *
 * @ApiResource(iri="http://schema.org/Offer")
 * @ORM\Entity
 */
class Offer
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @ORM\Column(type="text")
     */
    public $description;

    /**
     * @ORM\Column(type="float")
     * @Assert\NotBlank
     * @Assert\Range(min=0, minMessage="The price must be superior to 0.")
     * @Assert\Type(type="float")
     */
    public $price;

    /**
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="offers")
     */
    public $product;
}

И я хочу вернуть объект JSON, основанный на этой сущности продукта, но с настраиваемыми полями.

Действительно ли обязательно создавать новый ресурс только для этогоПОЛУЧИТЬ метод или есть лучшая практика для этого?

1 Ответ

0 голосов
/ 01 октября 2018

Существует несколько способов добавления пользовательских данных:

(самый простой) Добавить метод пользовательской сущности

class Offer
{
    public function getSomethingCustomized() 
    {
        return 'something_customized';
    }
}

Возможно, вам также понадобится использовать группы сериализации .

Украсить сериализатор

Если ваши пользовательские данные необходимо извлекать извне объекта: Вот документация

Он переопределяет значение по умолчанию Serializer (вызывается перед отправкой ответа) и позволяет добавлять дополнительные данные (откуда угодно) к каждому запросу.

Использовать события

Если вам нужен более детальный контрольВы также можете подключить одно (или более) событие API-платформы .

Я лично использую этот метод для согласования внешних связей (не сохраняемых доктриной) с (сохраняющимися) сущностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...