symfony много нормализаторов на одну сущность - PullRequest
0 голосов
/ 25 апреля 2020

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

, в этом действии мне нужно получить нормализатор для курьера:

    ## CourierController
     /**
     * @Rest\Get()
     */
    public function orders()
    {
        $serializer = $this->get('serializer');
        $orders = $this->getDoctrine()
            ->getRepository(Order::class)
            ->findBy(['courier' => $this->getUser()->getCourierAccount()]);
        $data = $serializer->normalize($orders); // <--------- 1) how to choose the right normalizer?
        return $this->json($data);
    }

Но в этом мне нужно что-то вроде 'ClientOrderNormalizer'

    ## ClientController
     /**
     * @Rest\Get()
     */
    public function orders()
    {
        $serializer = $this->get('serializer');
        $orders = $this->getDoctrine()
            ->getRepository(Order::class)
            ->findBy(['client' => $this->getUser()->getClientAccount()]);
        $data = $serializer->normalize($orders); // <--------- 2) how to choose the right normalizer?
        return $this->json($data);
    }

1 Ответ

0 голосов
/ 26 апреля 2020

1) Использование аннотаций групп сериализации -> смотрите здесь

2) Создайте пользовательский DTO, затем сериализуйте этот объект для ответа.

Пример создания пользовательского DTO.

final class SignInResponse implements ResponseInterface
{
    /**
     * @var string
     *
     * @SWG\Property(type="string", description="Token.")
     */
    private string $token;

    public function __construct(UserSession $userSession)
    {
        $this->token = $userSession->getToken();
    }

    /**
     * Get Token
     *
     * @return string
     */
    public function getToken(): string
    {
        return $this->token;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...