php - 如何使用 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);
}
}
现在我想为这个控制器中的所有响应传递这些标头。我想避免每次都手动发送它们。有没有办法自动为所有控制器的响应设置自定义标头,例如在构造函数或其他地方?
谢谢
解决方案
有多种方法可以做到这一点:
我想到的第一个是配置您的网络服务器以将这些标头附加到它基于 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
推荐阅读
- payment-gateway - 集成 iPad 阅读器时出现 SquareUp 支付网关问题
- sql - 通过插入查询将 Javascript 数据存储在列中时,SQL 查询在 Varchar 字段上的 Visual Studio15(数据库项目)中引发错误
- angular - 在没有 apikey 的情况下使用带有 angular 6 的 tinyMCE(免费)
- css - 离子应用不同的按钮样式
- java - Java 8 - 如何仅通过一次遍历从初始字符串构建字符串
- swift - 标签,字体以编程方式
- matlab - 为什么我的双线性插值与内置的 matlab 函数有很大不同?
- javascript - Javascript。将项目添加到数组会更新所有项目
- mysql - 一天中所有值的总和(24 小时)
- javascript - 在 null 或 undefined 中缺少 Flowtype 属性“msg”