为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2022-01-24 13:17:45
我正在使用 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);    }}现在我想为这个控制器中的所有响应传递这些标头。我想避免每次都手动发送它们。有没有办法自动为所有控制器的响应设置自定义标头,例如在构造函数或其他地方?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

有多种方法可以做到这一点:

  1. 我想到的第一个是配置您的网络服务器以将这些标头附加到它基于 URL 发送的每个响应中。

  2. 第二个是利用 Symfony 内部事件系统并kernel.response在那里捕获并附加标题。您需要根据来自哪里过滤响应 - https://symfony.com/doc/current/reference/events.html#kernel-response

  3. 另一件事是创建您自己的自定义处理程序,它调用这些setHeader()方法而不是在 Controller 中执行它。要提供此处理程序,您可以简单地覆盖handleView()方法 - https://symfony.com/doc/master/bundles/FOSRestBundle/2-the-view-layer.html#custom-handler


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信