我的一个服务是一个奇怪的问题,一个关于kernel.response的事件监听器。
我想在其中设置一些cookie(我需要cookie而不是与Symfony1 兼容的会话),并且无法找到...
直到最后我才明白我编写的代码是有效的,除非我在其中调试某些内容(就像Cookie的var_dump
)。
public function onKernelResponse(FilterResponseEvent $event)
{
if (HttpKernel::MASTER_REQUEST == $event->getRequestType()):
$request = $event->getRequest();
$response = $event->getResponse();
var_dump($request->cookies->all());
$response->headers->setCookie(new Cookie('foo', 'bar'));
endif;
}
所以这不起作用,我的cookie永远不在$request->cookies->all()
。
但是如果我评论var_dump
行,刷新并取消注释,那么cookie已经设置好了!
这是正常的吗?为什么?在这样的事件中打印会破坏标题吗?!
答案 0 :(得分:3)
注入logger
服务并使用它
$this->logger->debug(print_r($request->cookies->all(), true));
答案 1 :(得分:0)
这是因为执行var_dump()
,你“强制”php发送标题,所以,当你试图直接在你的响应中设置标题时,它不起作用,因为它们已经被填充。
在标题中设置Cookie后尝试执行var_dump()
。