diff --git a/src/Controller/Component/RequestHandlerComponent.php b/src/Controller/Component/RequestHandlerComponent.php index a06fa23c688..df2960e62fb 100644 --- a/src/Controller/Component/RequestHandlerComponent.php +++ b/src/Controller/Component/RequestHandlerComponent.php @@ -201,9 +201,10 @@ public function startup(Event $event) $this->_setExtension($request, $response); } - $request->params['isAjax'] = $request->is('ajax'); + $isAjax = $request->is('ajax'); + $controller->request = $request->withParam('isAjax', $isAjax); - if (!$this->ext && $request->is('ajax')) { + if (!$this->ext && $isAjax) { $this->ext = 'ajax'; } @@ -217,7 +218,7 @@ public function startup(Event $event) } if ($this->requestedWith($type)) { $input = $request->input(...$handler); - $request->data = (array)$input; + $controller->request = $request->withParsedBody((array)$input); } } } diff --git a/src/Routing/Filter/AssetFilter.php b/src/Routing/Filter/AssetFilter.php index c54b25f0d7d..e96ab526f5a 100644 --- a/src/Routing/Filter/AssetFilter.php +++ b/src/Routing/Filter/AssetFilter.php @@ -69,7 +69,7 @@ public function beforeDispatch(Event $event) /* @var \Cake\Http\ServerRequest $request */ $request = $event->getData('request'); - $url = urldecode($request->url); + $url = urldecode($request->getUri()->getPath()); if (strpos($url, '..') !== false || strpos($url, '.') === false) { return null; } @@ -101,7 +101,7 @@ public function beforeDispatch(Event $event) */ protected function _getAssetFile($url) { - $parts = explode('/', $url); + $parts = explode('/', ltrim($url, '/')); $pluginPart = []; for ($i = 0; $i < 2; $i++) { if (!isset($parts[$i])) { diff --git a/src/Routing/Router.php b/src/Routing/Router.php index 647b5a5042f..2e9e7682d71 100644 --- a/src/Routing/Router.php +++ b/src/Routing/Router.php @@ -620,8 +620,8 @@ public static function url($url = null, $full = false) // In 4.x this should be replaced with state injected via setRequestContext $request = static::getRequest(true); if ($request) { - $params = $request->params; - $here = $request->here; + $params = $request->getAttribute('params'); + $here = $request->getRequestTarget(); $base = $request->getAttribute('base'); } else { $base = Configure::read('App.base'); @@ -750,8 +750,8 @@ public static function reverseToArray($params) { $url = []; if ($params instanceof ServerRequest) { - $url = $params->query; - $params = $params->params; + $url = $params->getQueryParams(); + $params = $params->getAttribute('params'); } elseif (isset($params['url'])) { $url = $params['url']; } @@ -820,8 +820,11 @@ public static function normalize($url = '/') } $request = static::getRequest(); - if (!empty($request->base) && stristr($url, $request->base)) { - $url = preg_replace('/^' . preg_quote($request->base, '/') . '/', '', $url, 1); + if ($request) { + $base = $request->getAttribute('base'); + if (strlen($base) && stristr($url, $base)) { + $url = preg_replace('/^' . preg_quote($base, '/') . '/', '', $url, 1); + } } $url = '/' . $url; diff --git a/tests/TestCase/Routing/RouterTest.php b/tests/TestCase/Routing/RouterTest.php index 44baa7db4e5..8518299aa5c 100644 --- a/tests/TestCase/Routing/RouterTest.php +++ b/tests/TestCase/Routing/RouterTest.php @@ -512,16 +512,14 @@ public function testUrlNormalization() $result = Router::normalize('/recipe/recipes/add'); $this->assertEquals('/recipe/recipes/add', $result); - $request = new ServerRequest(); - $request->base = '/us'; + $request = new ServerRequest(['base' => '/us']); Router::setRequestInfo($request); $result = Router::normalize('/us/users/logout/'); $this->assertEquals('/users/logout', $result); Router::reload(); - $request = new ServerRequest(); - $request->base = '/cake_12'; + $request = new ServerRequest(['base' => '/cake_12']); Router::setRequestInfo($request); $result = Router::normalize('/cake_12/users/logout/'); $this->assertEquals('/users/logout', $result); @@ -531,15 +529,13 @@ public function testUrlNormalization() Configure::write('App.fullBaseUrl', '/'); $request = new ServerRequest(); - $request->base = '/'; Router::setRequestInfo($request); $result = Router::normalize('users/login'); $this->assertEquals('/users/login', $result); Configure::write('App.fullBaseUrl', $_back); Router::reload(); - $request = new ServerRequest(); - $request->base = 'beer'; + $request = new ServerRequest(['base' => 'beer']); Router::setRequestInfo($request); $result = Router::normalize('beer/admin/beers_tags/add'); $this->assertEquals('/admin/beers_tags/add', $result); @@ -562,7 +558,7 @@ public function testUrlGenerationWithBasePath() 'plugin' => null, 'controller' => 'subscribe', ], - 'here' => '/magazine/', + 'url' => '/magazine/', 'base' => '/magazine', 'webroot' => '/magazine/' ]);