diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 57883272c457b..b151768262717 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -56,6 +56,11 @@ class Request */ public $headers; + /** + * @var \Symfony\Component\HttpFoundation\ResponseHeaderBag + */ + public $responseHeaders; + protected $content; protected $languages; protected $charsets; @@ -108,6 +113,7 @@ public function initialize(array $query = array(), array $request = array(), arr $this->files = new FileBag($files); $this->server = new ServerBag($server); $this->headers = new HeaderBag($this->server->getHeaders()); + $this->responseHeaders = new ResponseHeaderBag(); $this->content = $content; $this->languages = null; diff --git a/src/Symfony/Component/HttpKernel/ResponseListener.php b/src/Symfony/Component/HttpKernel/ResponseListener.php index ae3f7484e54d5..eeec8617f3836 100644 --- a/src/Symfony/Component/HttpKernel/ResponseListener.php +++ b/src/Symfony/Component/HttpKernel/ResponseListener.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpKernel; use Symfony\Component\EventDispatcher\EventInterface; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** @@ -38,6 +39,8 @@ public function __construct($charset) */ public function filter(EventInterface $event, Response $response) { + $this->mergeHeadersFromRequest($event->get('request'), $response); + if (HttpKernelInterface::MASTER_REQUEST !== $event->get('request_type')) { return $response; } @@ -58,4 +61,15 @@ public function filter(EventInterface $event, Response $response) return $response; } + + protected function mergeHeadersFromRequest(Request $request, Response $response) + { + foreach ($request->responseHeaders->all() as $key => $value) { + $response->headers->set($key, $value, true); + } + + foreach ($request->responseHeaders->getCookies() as $cookie) { + $response->setCookie($cookie); + } + } } diff --git a/tests/Symfony/Tests/Component/HttpKernel/ResponseListenerTest.php b/tests/Symfony/Tests/Component/HttpKernel/ResponseListenerTest.php index 6dbeb05030f3a..132c991562e8d 100644 --- a/tests/Symfony/Tests/Component/HttpKernel/ResponseListenerTest.php +++ b/tests/Symfony/Tests/Component/HttpKernel/ResponseListenerTest.php @@ -22,7 +22,7 @@ class ResponseListenerTest extends \PHPUnit_Framework_TestCase { public function testFilterDoesNothingForSubRequests() { - $event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::SUB_REQUEST)); + $event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::SUB_REQUEST, 'request' => new Request())); $this->getDispatcher()->filter($event, $response = new Response('foo')); $this->assertEquals('', $response->headers->get('content-type')); @@ -30,7 +30,7 @@ public function testFilterDoesNothingForSubRequests() public function testFilterDoesNothingIfContentTypeIsSet() { - $event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST)); + $event = new Event(null, 'core.response', array('request_type' => HttpKernelInterface::MASTER_REQUEST, 'request' => new Request())); $response = new Response('foo'); $response->headers->set('Content-Type', 'text/plain'); $this->getDispatcher()->filter($event, $response);