Browse Source

Extract common code into a helper method.

Mark Story 9 years ago
parent
commit
95d9b0673d
2 changed files with 25 additions and 13 deletions
  1. 23 13
      src/Network/Request.php
  2. 2 0
      tests/TestCase/Network/RequestTest.php

+ 23 - 13
src/Network/Request.php

@@ -944,6 +944,21 @@ class Request implements ArrayAccess
     }
 
     /**
+     * Normalize a header name into the SERVER version.
+     *
+     * @param string $name The header name.
+     * @return string The normalized header name.
+     */
+    protected function normalizeHeaderName($name)
+    {
+        $name = str_replace('-', '_', strtoupper($name));
+        if (!in_array($name, ['CONTENT_LENGTH', 'CONTENT_TYPE'])) {
+            $name = 'HTTP_' . $name;
+        }
+        return $name;
+    }
+
+    /**
      * Read an HTTP header from the Request information.
      *
      * @param string $name Name of the header you want.
@@ -951,11 +966,7 @@ class Request implements ArrayAccess
      */
     public function header($name)
     {
-        $name = str_replace('-', '_', $name);
-        if (!in_array(strtoupper($name), ['CONTENT_LENGTH', 'CONTENT_TYPE'])) {
-            $name = 'HTTP_' . $name;
-        }
-
+        $name = $this->normalizeHeaderName($name);
         return $this->env($name);
     }
 
@@ -986,10 +997,7 @@ class Request implements ArrayAccess
      */
     public function getHeader($name)
     {
-        $name = str_replace('-', '_', strtoupper($name));
-        if (!in_array($name, ['CONTENT_LENGTH', 'CONTENT_TYPE'])) {
-            $name = 'HTTP_' . $name;
-        }
+        $name = $this->normalizeHeaderName($name);
         if (isset($this->_environment[$name])) {
             return (array)$this->_environment[$name];
         }
@@ -1020,10 +1028,7 @@ class Request implements ArrayAccess
     public function withHeader($name, $value)
     {
         $new = clone $this;
-        $name = strtoupper(str_replace('-', '_', $name));
-        if (!in_array($name, ['CONTENT_LENGTH', 'CONTENT_TYPE'])) {
-            $name = 'HTTP_' . $name;
-        }
+        $name = $this->normalizeHeaderName($name);
         $new->_environment[$name] = $value;
 
         return $new;
@@ -1051,6 +1056,11 @@ class Request implements ArrayAccess
      */
     public function withoutHeader($name)
     {
+        $new = clone $this;
+        $name = $this->normalizeHeaderName($name);
+        $new->_environment[$name] = $value;
+
+        return $new;
     }
 
     /**

+ 2 - 0
tests/TestCase/Network/RequestTest.php

@@ -1347,9 +1347,11 @@ class RequestTest extends TestCase
 
         $this->assertEquals(1337, $request->getHeaderLine('Content-length'), 'old request is unchanged');
         $this->assertEquals(999, $new->getHeaderLine('Content-length'), 'new request is correct');
+        $this->assertEquals(999, $new->header('Content-Length'));
 
         $new = $request->withHeader('Double', ['a']);
         $this->assertEquals(['a'], $new->getHeader('Double'), 'List values are overwritten');
+        $this->assertEquals(['a'], $new->header('Double'), 'headers written in bc way.');
     }
 
     /**