Symfony2:kernel.response事件中的Echo会破坏cookie吗?

时间:2013-07-25 07:36:08

标签: debugging events symfony cookies service

我的一个服务是一个奇怪的问题,一个关于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已经设置好了!

这是正常的吗?为什么?在这样的事件中打印会破坏标题吗?!

2 个答案:

答案 0 :(得分:3)

注入logger服务并使用它

$this->logger->debug(print_r($request->cookies->all(), true));

答案 1 :(得分:0)

这是因为执行var_dump(),你“强制”php发送标题,所以,当你试图直接在你的响应中设置标题时,它不起作用,因为它们已经被填充。​​

在标题中设置Cookie后尝试执行var_dump()