Как установить пользовательские заголовки во всех методах контроллера Symfony 4 с помощью FOSRestBundle? - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю RESTFUL API с помощью FOSRest Bundle и возвращаю данные с пользовательскими заголовками, например:

class InvestorController extends AbstractFOSRestController
{

    /**
     * Retrieve a list of investors
     *
     * @Rest\Get("/{page}", defaults={"page"=1}, requirements={"page"="\d+"})
     *
     * @param Integer $page
     * @param Request $request
     * @param InvestorRepository $investorRepository
     *
     * @return Response
     */
    public function getInvestorsAction($page, Request $request, InvestorRepository $investorRepository)
    {
        $data = $investorRepository->getInvestorsList($page);
        $data = $this->getUser()->getId();

        $view = $this->view($data, 200)
                     ->setHeader('Access-Control-Allow-Origin', 'http://localhost:3000') // Remove this bit in PROD
                     ->setHeader('Access-Control-Allow-Credentials', 'true'); // Remove this bit in PROD


        return $this->handleView($view);
    }
}

Теперь я хотел бы передать эти заголовки для всех ответов в этом контроллере.Я хотел бы избежать необходимости каждый раз отправлять их вручную.Есть ли способ установить пользовательские заголовки для всех ответов контроллера автоматически, скажем, в конструкторе или где-то еще?

Спасибо

1 Ответ

1 голос
/ 24 сентября 2019

Существует несколько способов сделать это:

  1. Первое, что мне приходит в голову, - это настроить ваш веб-сервер так, чтобы он прикреплял эти заголовки к каждому отправляемому им ответу на основе URL.

  2. Второй - использовать внутреннюю систему событий Symfony, поймать kernel.response и прикрепить туда заголовки.Вам нужно было бы отфильтровать ответ в зависимости от того, откуда он поступил - https://symfony.com/doc/current/reference/events.html#kernel-response

  3. Другое дело - создать свой собственный обработчик, который вызывает эти методы setHeader() вместо того, чтобы делать это внутри контроллера,Чтобы предоставить этот обработчик, вы можете просто переопределить метод handleView() - https://symfony.com/doc/master/bundles/FOSRestBundle/2-the-view-layer.html#custom-handler

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