如何使用 FOSRestBundle 在 Symfony 4 控制器的所有方法中设置自定义标头?

我正在使用 FOSRest Bundle 构建一个 RESTFUL API,并使用如下自定义标头返回数据:


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);

    }

}

现在我想为这个控制器中的所有响应传递这些标头。我想避免每次都手动发送它们。有没有办法自动为所有控制器的响应设置自定义标头,例如在构造函数或其他地方?


隔江千里
浏览 176回答 1
1回答

皈依舞

有多种方法可以做到这一点:我想到的第一个是配置您的网络服务器以将这些标头附加到它基于 URL 发送的每个响应中。第二个是利用 Symfony 内部事件系统并kernel.response在那里捕获并附加标题。您需要根据来自哪里过滤响应 - https://symfony.com/doc/current/reference/events.html#kernel-response另一件事是创建您自己的自定义处理程序,它调用这些setHeader()方法而不是在 Controller 中执行它。要提供此处理程序,您可以简单地覆盖handleView()方法 - https://symfony.com/doc/master/bundles/FOSRestBundle/2-the-view-layer.html#custom-handler
打开App,查看更多内容
随时随地看视频慕课网APP