Browse Source

Implement getParam()

Add getParam() which allows us to fully deprecate param().
Mark Story 9 years ago
parent
commit
b92686dc4c
2 changed files with 38 additions and 6 deletions
  1. 17 5
      src/Http/ServerRequest.php
  2. 21 1
      tests/TestCase/Network/RequestTest.php

+ 17 - 5
src/Http/ServerRequest.php

@@ -1459,11 +1459,7 @@ class ServerRequest implements ArrayAccess, ServerRequestInterface
 
             return $this;
         }
-        if (!isset($this->params[$name])) {
-            return Hash::get($this->params, $name, false);
-        }
-
-        return $this->params[$name];
+        return $this->getParam($name);
     }
 
     /**
@@ -1743,6 +1739,22 @@ class ServerRequest implements ArrayAccess, ServerRequestInterface
     }
 
     /**
+     * Safely access the values in $this->params.
+     *
+     * @param string $name The name of the parameter to get.
+     * @param mixed $default The default value if $name is not set.
+     * @return mixed
+     */
+    public function getParam($name, $default = false)
+    {
+        if (!isset($this->params[$name])) {
+            return Hash::get($this->params, $name, $default);
+        }
+
+        return $this->params[$name];
+    }
+
+    /**
      * Return an instance with the specified request attribute.
      *
      * @param string $name The attribute name.

+ 21 - 1
tests/TestCase/Network/RequestTest.php

@@ -2587,7 +2587,7 @@ class RequestTest extends TestCase
      *
      * @dataProvider paramReadingDataProvider
      */
-    public function testParamReading($toRead, $expected)
+    public function testGetParam($toRead, $expected)
     {
         $request = new Request('/');
         $request->addParams([
@@ -2603,6 +2603,26 @@ class RequestTest extends TestCase
             'zero' => '0',
         ]);
         $this->assertSame($expected, $request->param($toRead));
+        $this->assertSame($expected, $request->getParam($toRead));
+    }
+
+    /**
+     * Test getParam returning a default value.
+     *
+     * @return void
+     */
+    public function testGetParamDefault()
+    {
+        $request = new Request([
+            'params' => [
+                'controller' => 'Articles',
+                'null' => null,
+            ]
+        ]);
+        $this->assertSame('Articles', $request->getParam('controller', 'default'));
+        $this->assertSame('default', $request->getParam('null', 'default'));
+        $this->assertNull($request->getParam('unset', null));
+        $this->assertFalse($request->getParam('unset'));
     }
 
     /**