如何使用 FOSRestBundle 在 Symfony 4 控制器的所有方法中设置自定义 headers?
How to set custom headers in all methods of a Symfony 4 Controller with FOSRestBundle?
我正在构建一个 RESTFUL API 与 FOSRest 捆绑包和 return 自定义数据 headers 像这样:
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);
}
}
现在我想将这些 headers 传递给此控制器中的所有响应。我想避免每次都手动发送它们。有没有办法自动为所有控制器的响应设置自定义 headers,比如说,在构造函数或其他地方?
谢谢
有多种方法可以做到这一点:
我想到的第一个是配置您的网络服务器以将这些 headers 附加到它基于 URL.
[ 发送的每个响应中=27=]
第二个是利用 Symfony 内部事件系统并捕获 kernel.response
并将 headers 附加到那里。您需要根据来源过滤响应 -
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
我正在构建一个 RESTFUL API 与 FOSRest 捆绑包和 return 自定义数据 headers 像这样:
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);
}
}
现在我想将这些 headers 传递给此控制器中的所有响应。我想避免每次都手动发送它们。有没有办法自动为所有控制器的响应设置自定义 headers,比如说,在构造函数或其他地方?
谢谢
有多种方法可以做到这一点:
我想到的第一个是配置您的网络服务器以将这些 headers 附加到它基于 URL.
[ 发送的每个响应中=27=]第二个是利用 Symfony 内部事件系统并捕获
kernel.response
并将 headers 附加到那里。您需要根据来源过滤响应 - 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