Browse Source

Adds default value parameter to Request::env().

Michael Zender 10 years ago
parent
commit
b3ebd14dec
2 changed files with 31 additions and 2 deletions
  1. 4 2
      src/Network/Request.php
  2. 27 0
      tests/TestCase/Network/RequestTest.php

+ 4 - 2
src/Network/Request.php

@@ -1227,10 +1227,12 @@ class Request implements ArrayAccess
      *
      * @param string $key The key you want to read/write from/to.
      * @param string|null $value Value to set. Default null.
+     * @param string|null $default Default value when trying to retrieve an environment
+     *   variable's value that does not exist. The value parameter must be null.
      * @return $this|string|null This instance if used as setter,
      *   if used as getter either the environment value, or null if the value doesn't exist.
      */
-    public function env($key, $value = null)
+    public function env($key, $value = null, $default = null)
     {
         if ($value !== null) {
             $this->_environment[$key] = $value;
@@ -1242,7 +1244,7 @@ class Request implements ArrayAccess
         if (!array_key_exists($key, $this->_environment)) {
             $this->_environment[$key] = env($key);
         }
-        return $this->_environment[$key];
+        return $this->_environment[$key] !== null ? $this->_environment[$key] : $default;
     }
 
     /**

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

@@ -500,6 +500,33 @@ class RequestTest extends TestCase
     }
 
     /**
+     * Tests the env() method returning a default value in case the requested environment variable is not set.
+     */
+    public function testDefaultEnvValue()
+    {
+        $_ENV['DOES_NOT_EXIST'] = null;
+        $request = new Request();
+        $this->assertNull($request->env('DOES_NOT_EXIST'));
+        $request = new Request();
+        $this->assertEquals('default', $request->env('DOES_NOT_EXIST', null, 'default'));
+        $_ENV['DOES_EXIST'] = 'some value';
+        $request = new Request();
+        $this->assertEquals('some value', $request->env('DOES_EXIST'));
+        $request = new Request();
+        $this->assertEquals('some value', $request->env('DOES_EXIST', null, 'default'));
+        $_ENV['EMPTY_VALUE'] = '';
+        $request = new Request();
+        $this->assertEquals('', $request->env('EMPTY_VALUE'));
+        $request = new Request();
+        $this->assertEquals('', $request->env('EMPTY_VALUE', null, 'default'));
+        $_ENV['ZERO'] = '0';
+        $request = new Request();
+        $this->assertEquals('0', $request->env('ZERO'));
+        $request = new Request();
+        $this->assertEquals('0', $request->env('ZERO', null, 'default'));
+    }
+
+    /**
      * Test the clientIp method.
      *
      * @return void