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);
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: