From 37303d9c37abe86fe2d8eeea75b3e9d2fcf5316d Mon Sep 17 00:00:00 2001 From: Juan Basso Date: Tue, 14 Dec 2010 02:52:40 -0200 Subject: [PATCH] HttpResponse::getHeader() is more flexible to accept a custom header list. --- cake/libs/http_response.php | 16 ++++++++++------ cake/tests/cases/libs/http_response.test.php | 3 +++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/cake/libs/http_response.php b/cake/libs/http_response.php index aea0133ae..77b7feb02 100644 --- a/cake/libs/http_response.php +++ b/cake/libs/http_response.php @@ -94,11 +94,14 @@ class HttpResponse implements ArrayAccess { * @param string $name Header name * @return mixed String if header exists or null */ - public function getHeader($name) { - if (isset($this->headers[$name])) { - return $this->headers[$name]; + public function getHeader($name, $headers = null) { + if (!is_array($headers)) { + $headers =& $this->headers; } - foreach ($this->headers as $key => $value) { + if (isset($headers[$name])) { + return $headers[$name]; + } + foreach ($headers as $key => $value) { if (strcasecmp($key, $name) == 0) { return $value; } @@ -278,12 +281,13 @@ class HttpResponse implements ArrayAccess { * @todo Make this 100% RFC 2965 confirm */ public function parseCookies($header) { - if (!isset($header['Set-Cookie'])) { + $cookieHeader = $this->getHeader('Set-Cookie', $header); + if (!$cookieHeader) { return false; } $cookies = array(); - foreach ((array)$header['Set-Cookie'] as $cookie) { + foreach ((array)$cookieHeader as $cookie) { if (strpos($cookie, '";"') !== false) { $cookie = str_replace('";"', "{__cookie_replace__}", $cookie); $parts = str_replace("{__cookie_replace__}", '";"', explode(';', $cookie)); diff --git a/cake/tests/cases/libs/http_response.test.php b/cake/tests/cases/libs/http_response.test.php index 54a92e1a4..4f54dc3f7 100644 --- a/cake/tests/cases/libs/http_response.test.php +++ b/cake/tests/cases/libs/http_response.test.php @@ -113,6 +113,9 @@ class HttpResponseTest extends CakeTestCase { $this->assertEqual($this->HttpResponse->getHeader('header'), 'value'); $this->assertEqual($this->HttpResponse->getHeader('Content-Type'), 'text/plain'); $this->assertIdentical($this->HttpResponse->getHeader(0), null); + + $this->assertEqual($this->HttpResponse->getHeader('foo', false), 'Bar'); + $this->assertEqual($this->HttpResponse->getHeader('foo', array('foo' => 'not from class')), 'not from class'); } /**