Browse Source

Deprecate ServerRequest::addParams()

Mutating requests in place is going away, so this method has to go.
Mark Story 8 years ago
parent
commit
4f22837e1b

+ 7 - 0
src/Http/ServerRequest.php

@@ -921,9 +921,15 @@ class ServerRequest implements ArrayAccess, ServerRequestInterface
      *
      * @param array $params Array of parameters to merge in
      * @return $this The current object, you can chain this method.
+     * @deprecated 3.6.0 ServerRequest::addParams() is deprecated. Use `withParam()` or
+     *   `withAttribute('params')` instead.
      */
     public function addParams(array $params)
     {
+        deprecationWarning(
+            'ServerRequest::addParams() is deprecated. ' .
+            'Use `withParam()` or `withAttribute("params", $params)` instead.'
+        );
         $this->params = array_merge($this->params, $params);
 
         return $this;
@@ -935,6 +941,7 @@ class ServerRequest implements ArrayAccess, ServerRequestInterface
      *
      * @param array $paths Array of paths to merge in
      * @return $this The current object, you can chain this method.
+     * @deprecated 3.6.0 Mutating a request in place is deprecated. Use `withAttribute()` to modify paths instead.
      */
     public function addPaths(array $paths)
     {

+ 39 - 31
tests/TestCase/Http/ServerRequestTest.php

@@ -214,21 +214,24 @@ class ServerRequestTest extends TestCase
     /**
      * Test addParams() method
      *
+     * @group deprecated
      * @return void
      */
     public function testAddParams()
     {
-        $request = new ServerRequest();
-        $request = $request
-            ->withParam('controller', 'posts')
-            ->withParam('action', 'view');
-        $result = $request->addParams(['plugin' => null, 'action' => 'index']);
+        $this->deprecated(function () {
+            $request = new ServerRequest();
+            $request = $request
+                ->withParam('controller', 'posts')
+                ->withParam('action', 'view');
+            $result = $request->addParams(['plugin' => null, 'action' => 'index']);
 
-        $this->assertSame($result, $request, 'Method did not return itself. %s');
+            $this->assertSame($result, $request, 'Method did not return itself. %s');
 
-        $this->assertEquals('posts', $request->getParam('controller'));
-        $this->assertEquals('index', $request->getParam('action'));
-        $this->assertEquals(null, $request->getParam('plugin'));
+            $this->assertEquals('posts', $request->getParam('controller'));
+            $this->assertEquals('index', $request->getParam('action'));
+            $this->assertEquals(null, $request->getParam('plugin'));
+        });
     }
 
     /**
@@ -2669,22 +2672,25 @@ class ServerRequestTest extends TestCase
     /**
      * Test reading params
      *
+     * @group deprecated
      * @dataProvider paramReadingDataProvider
      */
     public function testGetParam($toRead, $expected)
     {
-        $request = new ServerRequest('/');
-        $request->addParams([
-            'action' => 'index',
-            'foo' => 'bar',
-            'baz' => [
-                'a' => [
-                    'b' => 'c',
+        $request = new ServerRequest([
+            'url' => '/',
+            'params' => [
+                'action' => 'index',
+                'foo' => 'bar',
+                'baz' => [
+                    'a' => [
+                        'b' => 'c',
+                    ],
                 ],
-            ],
-            'admin' => true,
-            'truthy' => 1,
-            'zero' => '0',
+                'admin' => true,
+                'truthy' => 1,
+                'zero' => '0',
+            ]
         ]);
         $this->deprecated(function () use ($expected, $request, $toRead) {
             $this->assertSame($expected, $request->param($toRead));
@@ -3074,21 +3080,23 @@ XML;
      */
     public function testIsRequested()
     {
-        $request = new ServerRequest();
-        $request->addParams([
-            'controller' => 'posts',
-            'action' => 'index',
-            'plugin' => null,
-            'requested' => 1
+        $request = new ServerRequest([
+            'params' => [
+                'controller' => 'posts',
+                'action' => 'index',
+                'plugin' => null,
+                'requested' => 1
+            ]
         ]);
         $this->assertTrue($request->is('requested'));
         $this->assertTrue($request->isRequested());
 
-        $request = new ServerRequest();
-        $request->addParams([
-            'controller' => 'posts',
-            'action' => 'index',
-            'plugin' => null,
+        $request = new ServerRequest([
+            'params' => [
+                'controller' => 'posts',
+                'action' => 'index',
+                'plugin' => null,
+            ]
         ]);
         $this->assertFalse($request->is('requested'));
         $this->assertFalse($request->isRequested());

+ 6 - 3
tests/TestCase/Routing/Filter/ControllerFactoryFilterTest.php

@@ -37,9 +37,10 @@ class ControllerFactoryFilterTest extends TestCase
 
         $filter = new ControllerFactoryFilter();
 
-        $request = new ServerRequest();
+        $request = new ServerRequest([
+            'params' => ['prefix' => 'admin', 'controller' => 'Posts', 'action' => 'index']
+        ]);
         $response = new Response();
-        $request->addParams(['prefix' => 'admin', 'controller' => 'Posts', 'action' => 'index']);
         $event = new Event(__CLASS__, $this, compact('request', 'response'));
         $filter->beforeDispatch($event);
 
@@ -48,7 +49,9 @@ class ControllerFactoryFilterTest extends TestCase
             get_class($event->getData('controller'))
         );
 
-        $request->addParams(['prefix' => 'admin/sub', 'controller' => 'Posts', 'action' => 'index']);
+        $request = new ServerRequest([
+            'params' => ['prefix' => 'admin/sub', 'controller' => 'Posts', 'action' => 'index']
+        ]);
         $event = new Event(__CLASS__, $this, compact('request', 'response'));
         $filter->beforeDispatch($event);
 

+ 45 - 38
tests/TestCase/Routing/Filter/RoutingFilterTest.php

@@ -23,6 +23,8 @@ use Cake\TestSuite\TestCase;
 
 /**
  * Routing filter test.
+ *
+ * @group deprecated
  */
 class RoutingFilterTest extends TestCase
 {
@@ -56,18 +58,20 @@ class RoutingFilterTest extends TestCase
      */
     public function testBeforeDispatchSetsParameters()
     {
-        Router::connect('/:controller/:action/*');
-        $filter = new RoutingFilter();
-
-        $request = new ServerRequest('/testcontroller/testaction/params1/params2/params3');
-        $event = new Event(__CLASS__, $this, compact('request'));
-        $filter->beforeDispatch($event);
-
-        $this->assertSame($request->getParam('controller'), 'testcontroller');
-        $this->assertSame($request->getParam('action'), 'testaction');
-        $this->assertSame($request->getParam('pass.0'), 'params1');
-        $this->assertSame($request->getParam('pass.1'), 'params2');
-        $this->assertSame($request->getParam('pass.2'), 'params3');
+        $this->deprecated(function () {
+            Router::connect('/:controller/:action/*');
+            $filter = new RoutingFilter();
+
+            $request = new ServerRequest('/testcontroller/testaction/params1/params2/params3');
+            $event = new Event(__CLASS__, $this, compact('request'));
+            $filter->beforeDispatch($event);
+
+            $this->assertSame($request->getParam('controller'), 'testcontroller');
+            $this->assertSame($request->getParam('action'), 'testaction');
+            $this->assertSame($request->getParam('pass.0'), 'params1');
+            $this->assertSame($request->getParam('pass.1'), 'params2');
+            $this->assertSame($request->getParam('pass.2'), 'params3');
+        });
     }
 
     /**
@@ -103,31 +107,34 @@ class RoutingFilterTest extends TestCase
      */
     public function testQueryStringOnRoot()
     {
-        Router::reload();
-        Router::connect('/', ['controller' => 'pages', 'action' => 'display', 'home']);
-        Router::connect('/pages/*', ['controller' => 'pages', 'action' => 'display']);
-        Router::connect('/:controller/:action/*');
-
-        $_GET = ['coffee' => 'life', 'sleep' => 'sissies'];
-        $filter = new RoutingFilter();
-        $request = new ServerRequest('posts/home/?coffee=life&sleep=sissies');
-
-        $event = new Event(__CLASS__, $this, compact('request'));
-        $filter->beforeDispatch($event);
-
-        $this->assertRegExp('/posts/', $request->getParam('controller'));
-        $this->assertRegExp('/home/', $request->getParam('action'));
-        $this->assertSame('sissies', $request->getQuery('sleep'));
-        $this->assertSame('life', $request->getQuery('coffee'));
-
-        $request = new ServerRequest('/?coffee=life&sleep=sissy');
-        $event = new Event(__CLASS__, $this, compact('request'));
-        $filter->beforeDispatch($event);
-
-        $this->assertRegExp('/pages/', $request->getParam('controller'));
-        $this->assertRegExp('/display/', $request->getParam('action'));
-        $this->assertSame('sissy', $request->getQuery('sleep'));
-        $this->assertSame('life', $request->getQuery('coffee'));
-        $this->assertEquals('life', $request->getQuery('coffee'));
+        $this->deprecated(function () {
+            Router::reload();
+            Router::connect('/', ['controller' => 'pages', 'action' => 'display', 'home']);
+            Router::connect('/pages/*', ['controller' => 'pages', 'action' => 'display']);
+            Router::connect('/:controller/:action/*');
+
+            $_GET = ['coffee' => 'life', 'sleep' => 'sissies'];
+            $filter = new RoutingFilter();
+            $request = new ServerRequest('posts/home/?coffee=life&sleep=sissies');
+
+            $event = new Event(__CLASS__, $this, compact('request'));
+            $filter->beforeDispatch($event);
+
+            $this->assertRegExp('/posts/', $request->getParam('controller'));
+            $this->assertRegExp('/home/', $request->getParam('action'));
+            $this->assertSame('sissies', $request->getQuery('sleep'));
+            $this->assertSame('life', $request->getQuery('coffee'));
+
+            $request = new ServerRequest('/?coffee=life&sleep=sissy');
+
+            $event = new Event(__CLASS__, $this, compact('request'));
+            $filter->beforeDispatch($event);
+
+            $this->assertRegExp('/pages/', $request->getParam('controller'));
+            $this->assertRegExp('/display/', $request->getParam('action'));
+            $this->assertSame('sissy', $request->getQuery('sleep'));
+            $this->assertSame('life', $request->getQuery('coffee'));
+            $this->assertEquals('life', $request->getQuery('coffee'));
+        });
     }
 }

+ 245 - 292
tests/TestCase/Routing/RouterTest.php

@@ -104,15 +104,16 @@ class RouterTest extends TestCase
     public function testCurrentUrlWithBasePath()
     {
         Router::fullBaseUrl('http://example.com');
-        $request = new ServerRequest();
-        $request->addParams([
-            'action' => 'view',
-            'plugin' => null,
-            'controller' => 'pages',
-            'pass' => ['1']
+        $request = new ServerRequest([
+            'params' => [
+                'action' => 'view',
+                'plugin' => null,
+                'controller' => 'pages',
+                'pass' => ['1']
+            ],
+            'here' => '/cakephp',
+            'url' => '/cakephp/pages/view/1',
         ]);
-        $request->base = '/cakephp';
-        $request->here = '/cakephp/pages/view/1';
         Router::setRequestInfo($request);
         $this->assertEquals('http://example.com/cakephp/pages/view/1', Router::url(null, true));
         $this->assertEquals('/cakephp/pages/view/1', Router::url());
@@ -555,15 +556,16 @@ class RouterTest extends TestCase
     public function testUrlGenerationWithBasePath()
     {
         Router::connect('/:controller/:action/*');
-        $request = new ServerRequest();
-        $request->addParams([
-            'action' => 'index',
-            'plugin' => null,
-            'controller' => 'subscribe',
+        $request = new ServerRequest([
+            'params' => [
+                'action' => 'index',
+                'plugin' => null,
+                'controller' => 'subscribe',
+            ],
+            'here' => '/magazine/',
+            'base' => '/magazine',
+            'webroot' => '/magazine/'
         ]);
-        $request->base = '/magazine';
-        $request->here = '/magazine/';
-        $request->webroot = '/magazine/';
         Router::pushRequest($request);
 
         $result = Router::url();
@@ -696,15 +698,13 @@ class RouterTest extends TestCase
 
         Router::reload();
         Router::connect('/:controller/:action');
-        $request = new ServerRequest();
-        $request->addParams([
-            'action' => 'index',
-            'plugin' => null,
-            'controller' => 'users',
+        $request = new ServerRequest([
+            'params' => [
+                'action' => 'index',
+                'plugin' => null,
+                'controller' => 'users',
+            ]
         ]);
-        $request->base = '/';
-        $request->here = '/';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         $result = Router::url(['action' => 'login']);
@@ -725,15 +725,13 @@ class RouterTest extends TestCase
 
         Router::reload();
         Router::connect('/:controller', ['action' => 'index']);
-        $request = new ServerRequest();
-        $request->addParams([
-            'action' => 'index',
-            'plugin' => 'myplugin',
-            'controller' => 'mycontroller',
+        $request = new ServerRequest([
+            'params' => [
+                'action' => 'index',
+                'plugin' => 'myplugin',
+                'controller' => 'mycontroller',
+            ]
         ]);
-        $request->base = '/';
-        $request->here = '/';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'myothercontroller']);
@@ -897,17 +895,16 @@ class RouterTest extends TestCase
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
         Router::extensions('rss', false);
 
-        $request = new ServerRequest();
-        $request->addParams([
-            'controller' => 'registrations',
-            'action' => 'admin_index',
-            'plugin' => null,
-            'prefix' => 'admin',
-            '_ext' => 'html'
+        $request = new ServerRequest([
+            'params' => [
+                'controller' => 'registrations',
+                'action' => 'admin_index',
+                'plugin' => null,
+                'prefix' => 'admin',
+                '_ext' => 'html'
+            ],
+            'url' => '/admin/registrations/index',
         ]);
-        $request->base = '';
-        $request->here = '/admin/registrations/index';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         $result = Router::url([]);
@@ -918,16 +915,17 @@ class RouterTest extends TestCase
         Router::connect('/admin/subscriptions/:action/*', ['controller' => 'subscribe', 'prefix' => 'admin']);
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
 
-        $request = new ServerRequest();
-        $request->addParams([
-            'action' => 'index',
-            'plugin' => null,
-            'controller' => 'subscribe',
-            'prefix' => 'admin',
+        $request = new ServerRequest([
+            'params' => [
+                'action' => 'index',
+                'plugin' => null,
+                'controller' => 'subscribe',
+                'prefix' => 'admin',
+            ],
+            'webroot' => '/magazine/',
+            'base' => '/magazine',
+            'url' => '/magazine/admin/subscriptions/edit/1',
         ]);
-        $request->base = '/magazine';
-        $request->here = '/magazine/admin/subscriptions/edit/1';
-        $request->webroot = '/magazine/';
         Router::setRequestInfo($request);
 
         $result = Router::url(['action' => 'edit', 1]);
@@ -939,16 +937,16 @@ class RouterTest extends TestCase
         $this->assertEquals($expected, $result);
 
         Router::reload();
-        $request = new ServerRequest();
-        $request->addParams([
-            'prefix' => 'admin',
-            'action' => 'index',
-            'plugin' => null,
-            'controller' => 'users',
+        $request = new ServerRequest([
+            'params' => [
+                'prefix' => 'admin',
+                'action' => 'index',
+                'plugin' => null,
+                'controller' => 'users',
+            ],
+            'webroot' => '/',
+            'url' => '/admin/users/index',
         ]);
-        $request->base = '/';
-        $request->here = '/';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         Router::connect('/page/*', ['controller' => 'pages', 'action' => 'view', 'prefix' => 'admin']);
@@ -960,16 +958,16 @@ class RouterTest extends TestCase
         Router::reload();
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
 
-        $request = new ServerRequest();
-        $request->addParams([
-            'plugin' => null,
-            'controller' => 'pages',
-            'action' => 'add',
-            'prefix' => 'admin'
+        $request = new ServerRequest([
+            'params' => [
+                'plugin' => null,
+                'controller' => 'pages',
+                'action' => 'add',
+                'prefix' => 'admin'
+            ],
+            'webroot' => '/',
+            'url' => '/admin/pages/add',
         ]);
-        $request->base = '';
-        $request->here = '/admin/pages/add';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'pages', 'action' => 'add', 'id' => false]);
@@ -978,16 +976,16 @@ class RouterTest extends TestCase
 
         Router::reload();
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
-        $request = new ServerRequest();
-        $request->addParams([
-            'plugin' => null,
-            'controller' => 'pages',
-            'action' => 'add',
-            'prefix' => 'admin'
+        $request = new ServerRequest([
+            'params' => [
+                'plugin' => null,
+                'controller' => 'pages',
+                'action' => 'add',
+                'prefix' => 'admin'
+            ],
+            'webroot' => '/',
+            'url' => '/admin/pages/add',
         ]);
-        $request->base = '';
-        $request->here = '/admin/pages/add';
-        $request->webroot = '/';
         Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'pages', 'action' => 'add', 'id' => false]);
@@ -996,20 +994,17 @@ class RouterTest extends TestCase
 
         Router::reload();
         Router::connect('/admin/:controller/:action/:id', ['prefix' => 'admin'], ['id' => '[0-9]+']);
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'params' => [
                 'plugin' => null,
                 'controller' => 'pages',
                 'action' => 'edit',
                 'pass' => ['284'],
                 'prefix' => 'admin'
-            ])->addPaths([
-                'base' => '',
-                'here' => '/admin/pages/edit/284',
-                'webroot' => '/'
-            ])
-        );
+            ],
+            'url' => '/admin/pages/edit/284',
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'pages', 'action' => 'edit', 'id' => '284']);
         $expected = '/admin/pages/edit/284';
@@ -1018,14 +1013,13 @@ class RouterTest extends TestCase
         Router::reload();
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'params' => [
                 'plugin' => null, 'controller' => 'pages', 'action' => 'add', 'prefix' => 'admin',
-            ])->addPaths([
-                'base' => '', 'here' => '/admin/pages/add', 'webroot' => '/'
-            ])
-        );
+            ],
+            'url' => '/admin/pages/add',
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'pages', 'action' => 'add', 'id' => false]);
         $expected = '/admin/pages/add';
@@ -1034,15 +1028,13 @@ class RouterTest extends TestCase
         Router::reload();
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'params' => [
                 'plugin' => null, 'controller' => 'pages', 'action' => 'edit', 'prefix' => 'admin',
-                'pass' => ['284']
-            ])->addPaths([
-                'base' => '', 'here' => '/admin/pages/edit/284', 'webroot' => '/'
-            ])
-        );
+            ],
+            'url' => '/admin/pages/edit/284',
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['plugin' => null, 'controller' => 'pages', 'action' => 'edit', 284]);
         $expected = '/admin/pages/edit/284';
@@ -1050,14 +1042,14 @@ class RouterTest extends TestCase
 
         Router::reload();
         Router::connect('/admin/posts/*', ['controller' => 'posts', 'action' => 'index', 'prefix' => 'admin']);
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'params' => [
                 'plugin' => null, 'controller' => 'posts', 'action' => 'index', 'prefix' => 'admin',
                 'pass' => ['284']
-            ])->addPaths([
-                'base' => '', 'here' => '/admin/posts', 'webroot' => '/'
-            ])
-        );
+            ],
+            'url' => '/admin/pages/edit/284',
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['all']);
         $expected = '/admin/posts/all';
@@ -1163,8 +1155,9 @@ class RouterTest extends TestCase
         Router::scope('/', function ($r) {
             $r->fallbacks('InflectedRoute');
         });
-        $request = new ServerRequest();
-        $request->addParams(['controller' => 'Tasks', 'action' => 'index', '_ext' => 'rss']);
+        $request = new ServerRequest([
+            'params' => ['plugin' => null, 'controller' => 'Tasks', 'action' => 'index', '_ext' => 'rss']
+        ]);
         Router::pushRequest($request);
 
         $result = Router::url([
@@ -1277,14 +1270,13 @@ class RouterTest extends TestCase
     public function testUrlGenerationWithUrlFilter()
     {
         Router::connect('/:lang/:controller/:action/*');
-        $request = new ServerRequest();
-        $request->addParams([
-            'lang' => 'en',
-            'controller' => 'posts',
-            'action' => 'index'
-        ])->addPaths([
-            'base' => '',
-            'here' => '/'
+        $request = new ServerRequest([
+            'params' => [
+                'plugin' => null,
+                'lang' => 'en',
+                'controller' => 'posts',
+                'action' => 'index'
+            ]
         ]);
         Router::pushRequest($request);
 
@@ -1314,14 +1306,14 @@ class RouterTest extends TestCase
     public function testUrlParamPersistence()
     {
         Router::connect('/:lang/:controller/:action/*', [], ['persist' => ['lang']]);
-        $request = new ServerRequest();
-        $request->addParams([
-            'lang' => 'en',
-            'controller' => 'posts',
-            'action' => 'index'
-        ])->addPaths([
-            'base' => '',
-            'here' => '/'
+        $request = new ServerRequest([
+            'url' => '/en/posts/index',
+            'params' => [
+                'plugin' => null,
+                'lang' => 'en',
+                'controller' => 'posts',
+                'action' => 'index'
+            ]
         ]);
         Router::pushRequest($request);
 
@@ -1358,20 +1350,17 @@ class RouterTest extends TestCase
     {
         Router::connect('/admin/:controller', ['action' => 'index', 'prefix' => 'admin']);
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/admin/this/interesting/index',
+            'params' => [
                 'pass' => [],
                 'prefix' => 'admin',
                 'plugin' => 'this',
                 'action' => 'index',
                 'controller' => 'interesting',
-            ])->addPaths([
-                'base' => '',
-                'here' => '/admin/this/interesting/index',
-                'webroot' => '/',
-            ])
-        );
+            ]
+        ]);
+        Router::setRequestInfo($request);
         $result = Router::url(['plugin' => null, 'controller' => 'posts', 'action' => 'index']);
         $this->assertEquals('/admin/posts', $result);
     }
@@ -2002,17 +1991,14 @@ class RouterTest extends TestCase
         Router::connect('/admin/:controller/:action/*', ['prefix' => 'admin']);
         Router::connect('/:controller/:action/*');
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/images/index',
+            'params' => [
                 'plugin' => null, 'controller' => 'images', 'action' => 'index',
                 'prefix' => null, 'protected' => false, 'url' => ['url' => 'images/index']
-            ])->addPaths([
-                'base' => '',
-                'here' => '/images/index',
-                'webroot' => '/',
-            ])
-        );
+            ],
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['controller' => 'images', 'action' => 'add']);
         $expected = '/images/add';
@@ -2059,19 +2045,14 @@ class RouterTest extends TestCase
     public function testGenerationWithSslOption()
     {
         Router::connect('/:controller/:action/*');
-
         $request = new ServerRequest([
+            'url' => '/images/index',
+            'params' => [
+                'plugin' => null, 'controller' => 'images', 'action' => 'index'
+            ],
             'environment' => ['HTTP_HOST' => 'localhost']
         ]);
-        Router::pushRequest(
-            $request->addParams([
-                'plugin' => null, 'controller' => 'images', 'action' => 'index'
-            ])->addPaths([
-                'base' => '',
-                'here' => '/images/index',
-                'webroot' => '/',
-            ])
-        );
+        Router::pushRequest($request);
 
         $result = Router::url([
             '_ssl' => true
@@ -2092,21 +2073,16 @@ class RouterTest extends TestCase
     public function testGenerateWithSslInSsl()
     {
         Router::connect('/:controller/:action/*');
-
         $request = new ServerRequest([
-            'environment' => ['HTTP_HOST' => 'localhost', 'HTTPS' => 'on']
-        ]);
-        Router::pushRequest(
-            $request->addParams([
+            'url' => '/images/index',
+            'environment' => ['HTTP_HOST' => 'localhost', 'HTTPS' => 'on'],
+            'params' => [
                 'plugin' => null,
                 'controller' => 'images',
                 'action' => 'index'
-            ])->addPaths([
-                'base' => '',
-                'here' => '/images/index',
-                'webroot' => '/',
-            ])
-        );
+            ]
+        ]);
+        Router::pushRequest($request);
 
         $result = Router::url([
             '_ssl' => false
@@ -2130,19 +2106,16 @@ class RouterTest extends TestCase
         Router::connect('/protected/:controller/:action', ['prefix' => 'protected']);
         Router::connect('/:controller/:action');
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/protected/images/index',
+            'params' => [
                 'plugin' => null,
                 'controller' => 'images',
                 'action' => 'index',
                 'prefix' => 'protected',
-            ])->addPaths([
-                'base' => '',
-                'here' => '/protected/images/index',
-                'webroot' => '/',
-            ])
-        );
+            ]
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['prefix' => 'protected', 'controller' => 'images', 'action' => 'add']);
         $expected = '/protected/images/add';
@@ -2167,34 +2140,25 @@ class RouterTest extends TestCase
         Router::connect('/admin/:controller/:action', ['prefix' => 'admin']);
         Router::connect('/protected/:controller/:action', ['prefix' => 'protected']);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/protected/images/index',
+            'params' => [
                 'plugin' => null, 'controller' => 'images', 'action' => 'index', 'prefix' => 'protected',
-            ])->addPaths([
-                'base' => '',
-                'here' => '/protected/images/index',
-                'webroot' => '/',
-            ])
-        );
+            ],
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['controller' => 'images', 'action' => 'add', 'prefix' => 'admin']);
         $expected = '/admin/images/add';
         $this->assertEquals($expected, $result);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
-                'plugin' => null,
-                'controller' => 'images',
-                'action' => 'index',
-                'prefix' => 'admin',
-            ])->addPaths([
-                'base' => '',
-                'here' => '/admin/images/index',
-                'webroot' => '/',
-            ])
-        );
+        $request = new ServerRequest([
+            'url' => '/admin/images/index',
+            'params' => [
+                'plugin' => null, 'controller' => 'images', 'action' => 'index', 'prefix' => 'admin',
+            ],
+        ]);
+        Router::setRequestInfo($request);
         $result = Router::url(['controller' => 'images', 'action' => 'add', 'prefix' => 'protected']);
         $expected = '/protected/images/add';
         $this->assertEquals($expected, $result);
@@ -2236,17 +2200,14 @@ class RouterTest extends TestCase
     public function testRemoveBase()
     {
         Router::connect('/:controller/:action');
-
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/',
+            'base' => '/base',
+            'params' => [
                 'plugin' => null, 'controller' => 'controller', 'action' => 'index',
-            ])->addPaths([
-                'base' => '/base',
-                'here' => '/',
-                'webroot' => '/base/',
-            ])
-        );
+            ]
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['controller' => 'my_controller', 'action' => 'my_action']);
         $expected = '/base/my_controller/my_action';
@@ -2408,16 +2369,12 @@ class RouterTest extends TestCase
         Router::connect('/admin/:controller', $adminParams);
         Router::connect('/admin/:controller/:action/*', $adminParams);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
-                'plugin' => null, 'controller' => 'controller', 'action' => 'index'
-            ])->addPaths([
-                'base' => '/base',
-                'here' => '/',
-                'webroot' => '/base/',
-            ])
-        );
+        $request = new ServerRequest([
+            'url' => '/',
+            'base' => '/base',
+            'params' => ['plugin' => null, 'controller' => 'controller', 'action' => 'index']
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::parseRequest($this->makeRequest('/admin/posts/', 'GET'));
         $expected = [
@@ -2444,16 +2401,12 @@ class RouterTest extends TestCase
         Router::connect('/members/:controller/:action', $prefixParams);
         Router::connect('/members/:controller/:action/*', $prefixParams);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
-                'plugin' => null, 'controller' => 'controller', 'action' => 'index',
-            ])->addPaths([
-                'base' => '/base',
-                'here' => '/',
-                'webroot' => '/',
-            ])
-        );
+        $request = new ServerRequest([
+            'url' => '/',
+            'base' => '/base',
+            'params' => ['plugin' => null, 'controller' => 'controller', 'action' => 'index']
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::parseRequest($this->makeRequest('/members/posts/index', 'GET'));
         $expected = [
@@ -2485,19 +2438,16 @@ class RouterTest extends TestCase
         $expected = '/company/users/login';
         $this->assertEquals($expected, $result);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/',
+            'params' => [
                 'plugin' => null,
                 'controller' => 'users',
                 'action' => 'login',
                 'prefix' => 'company'
-            ])->addPaths([
-                'base' => '/',
-                'here' => '/',
-                'webroot' => '/base/',
-            ])
-        );
+            ]
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['controller' => 'users', 'action' => 'login', 'prefix' => false]);
         $expected = '/login';
@@ -2515,17 +2465,17 @@ class RouterTest extends TestCase
             '/admin/login',
             ['controller' => 'users', 'action' => 'login', 'prefix' => 'admin']
         );
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
-                'plugin' => null, 'controller' => 'posts', 'action' => 'index',
+        $request = new ServerRequest([
+            'url' => '/',
+            'params' => [
+                'plugin' => null,
+                'controller' => 'posts',
+                'action' => 'index',
                 'prefix' => 'admin'
-            ])->addPaths([
-                'base' => '/',
-                'here' => '/',
-                'webroot' => '/',
-            ])
-        );
+            ],
+            'webroot' => '/'
+        ]);
+        Router::setRequestInfo($request);
         $result = Router::url(['controller' => 'users', 'action' => 'login']);
         $this->assertEquals('/admin/login', $result);
 
@@ -2603,19 +2553,16 @@ class RouterTest extends TestCase
         $this->expectException(\Cake\Routing\Exception\MissingRouteException::class);
         Router::connect('/:locale/:controller/:action/*', [], ['locale' => 'dan|eng']);
 
-        $request = new ServerRequest();
-        Router::setRequestInfo(
-            $request->addParams([
+        $request = new ServerRequest([
+            'url' => '/test/test_action',
+            'params' => [
                 'plugin' => null,
                 'controller' => 'test',
                 'action' => 'index',
-                'url' => ['url' => 'test/test_action']
-            ])->addPaths([
-                'base' => '',
-                'here' => '/test/test_action',
-                'webroot' => '/',
-            ])
-        );
+            ],
+            'webroot' => '/'
+        ]);
+        Router::setRequestInfo($request);
 
         $result = Router::url(['action' => 'test_another_action', 'locale' => 'eng']);
         $expected = '/eng/test/test_another_action';
@@ -2748,14 +2695,16 @@ class RouterTest extends TestCase
     public function testReverseCakeRequestQuery()
     {
         Router::connect('/:lang/:controller/:action/*', [], ['lang' => '[a-z]{3}']);
-        $request = new ServerRequest('/eng/posts/view/1');
-        $request->addParams([
-            'lang' => 'eng',
-            'controller' => 'posts',
-            'action' => 'view',
-            'pass' => [1],
+        $request = new ServerRequest([
+            'url' => '/eng/posts/view/1',
+            'params' => [
+                'lang' => 'eng',
+                'controller' => 'posts',
+                'action' => 'view',
+                'pass' => [1],
+            ],
+            'query' => ['url' => 'eng/posts/view/1', 'test' => 'value']
         ]);
-        $request->query = ['url' => 'eng/posts/view/1', 'test' => 'value'];
         $result = Router::reverse($request);
         $expected = '/eng/posts/view/1?test=value';
         $this->assertEquals($expected, $result);
@@ -2784,14 +2733,15 @@ class RouterTest extends TestCase
         Router::connect('/:controller/:action/*');
         Router::extensions('json', false);
 
-        $request = new ServerRequest('/posts/view/1.json');
-        $request->addParams([
-            'controller' => 'posts',
-            'action' => 'view',
-            'pass' => [1],
-            '_ext' => 'json',
+        $request = new ServerRequest([
+            'url' => '/posts/view/1.json',
+            'params' => [
+                'controller' => 'posts',
+                'action' => 'view',
+                'pass' => [1],
+                '_ext' => 'json',
+            ]
         ]);
-        $request->query = [];
         $result = Router::reverse($request);
         $expected = '/posts/view/1.json';
         $this->assertEquals($expected, $result);
@@ -2823,22 +2773,22 @@ class RouterTest extends TestCase
     public function testReverseToArrayRequestQuery()
     {
         Router::connect('/:lang/:controller/:action/*', [], ['lang' => '[a-z]{3}']);
-        $request = new ServerRequest('/eng/posts/view/1');
-        $request->addParams([
-            'lang' => 'eng',
-            'controller' => 'posts',
-            'action' => 'view',
-            'pass' => [123],
+        $request = new ServerRequest([
+            'url' => '/eng/posts/view/1',
+            'params' => [
+                'lang' => 'eng',
+                'controller' => 'posts',
+                'action' => 'view',
+                'pass' => [123],
+            ],
+            'query' => ['url' => 'eng/posts/view/1', 'test' => 'value']
         ]);
-        $request->query = ['url' => 'eng/posts/view/1', 'test' => 'value'];
         $actual = Router::reverseToArray($request);
         $expected = [
             'lang' => 'eng',
-            'plugin' => null,
             'controller' => 'posts',
             'action' => 'view',
             123,
-            '_ext' => null,
             '?' => [
                 'test' => 'value',
             ],
@@ -2906,21 +2856,24 @@ class RouterTest extends TestCase
         Router::connect('/:controller', ['action' => 'index']);
         Router::connect('/:controller/:action');
 
-        $firstRequest = new ServerRequest('/posts/index');
-        $firstRequest->addParams([
-            'plugin' => null,
-            'controller' => 'posts',
-            'action' => 'index'
-        ])->addPaths(['base' => '']);
-
-        $secondRequest = new ServerRequest('/posts/index');
-        $secondRequest->addParams([
-            'requested' => 1,
-            'plugin' => null,
-            'controller' => 'comments',
-            'action' => 'listing'
-        ])->addPaths(['base' => '']);
+        $firstRequest = new ServerRequest([
+            'url' => '/posts/index',
+            'params' => [
+                'plugin' => null,
+                'controller' => 'posts',
+                'action' => 'index'
+            ]
+        ]);
 
+        $secondRequest = new ServerRequest([
+            'url' => '/posts/index',
+            'params' => [
+                'requested' => 1,
+                'plugin' => null,
+                'controller' => 'comments',
+                'action' => 'listing'
+            ]
+        ]);
         Router::setRequestInfo($firstRequest);
         Router::setRequestInfo($secondRequest);