1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Framework\App\Request;
- /**
- * Computes path info and query string from request
- */
- class PathInfo
- {
- /**
- * Get path info using from the request URI and base URL
- *
- * @param string $requestUri
- * @param string $baseUrl
- * @return string
- */
- public function getPathInfo(string $requestUri, string $baseUrl) : string
- {
- if ($requestUri === '/') {
- return '';
- }
- $requestUri = $this->removeRepeatedSlashes($requestUri);
- $parsedRequestUri = explode('?', $requestUri, 2);
- $pathInfo = (string)substr(current($parsedRequestUri), (int)strlen($baseUrl));
- if ($this->isNoRouteUri($baseUrl, $pathInfo)) {
- $pathInfo = \Magento\Framework\App\Router\Base::NO_ROUTE;
- }
- return $pathInfo;
- }
- /**
- * Get query string using from the request URI
- *
- * @param string $requestUri
- * @return string
- */
- public function getQueryString(string $requestUri) : string
- {
- $requestUri = $this->removeRepeatedSlashes($requestUri);
- $parsedRequestUri = explode('?', $requestUri, 2);
- $queryString = !isset($parsedRequestUri[1]) ? '' : '?' . $parsedRequestUri[1];
- return $queryString;
- }
- /**
- * Remove repeated slashes from the start of the path.
- *
- * @param string $pathInfo
- * @return string
- */
- private function removeRepeatedSlashes($pathInfo) : string
- {
- $firstChar = (string)substr($pathInfo, 0, 1);
- if ($firstChar == '/') {
- $pathInfo = '/' . ltrim($pathInfo, '/');
- }
- return $pathInfo;
- }
- /**
- * Check is URI should be marked as no route, helps route to 404 URI like `index.phpadmin`.
- *
- * @param string $baseUrl
- * @param string $pathInfo
- * @return bool
- */
- private function isNoRouteUri($baseUrl, $pathInfo) : bool
- {
- $firstChar = (string)substr($pathInfo, 0, 1);
- return $baseUrl !== '' && !in_array($firstChar, ['/', '']);
- }
- }
|