|
22 | 22 |
|
23 | 23 | class StorePathInfoValidator |
24 | 24 | { |
| 25 | + private int $stack = 0; |
| 26 | + |
25 | 27 | public function __construct( |
26 | 28 | private Config $config, |
27 | 29 | private StoreRepositoryInterface $storeRepository |
28 | 30 | ) {} |
29 | 31 |
|
30 | 32 | public function beforeGetValidStoreCode(Subject $subject, Http $request, string $pathInfo = ''): array |
31 | 33 | { |
32 | | - if ($this->config->isBaseUrlResolverEnabled()) { |
33 | | - $originalPathInfo = $pathInfo; |
34 | | - $uri = strtok($request->getUriString(), '?') . '/'; |
35 | | - if ($uri !== false) { |
36 | | - if ($pathInfo === '') { |
37 | | - $pathInfo = parse_url($uri, PHP_URL_PATH); |
38 | | - if ($pathInfo === false) { |
39 | | - return [$request, $originalPathInfo]; |
40 | | - } |
41 | | - $pathInfo = strtok($pathInfo, '/'); |
| 34 | + if (++$this->stack === 1 && $this->config->isBaseUrlResolverEnabled()) { |
| 35 | + $storeCode = $this->resolveStoreCode($pathInfo); |
| 36 | + $pathInfo = $storeCode === '' ? $pathInfo : $storeCode; |
| 37 | + } |
| 38 | + $this->stack--; |
| 39 | + |
| 40 | + return [$request, $pathInfo]; |
| 41 | + } |
| 42 | + |
| 43 | + private function resolveStoreCode(string $pathInfo): string |
| 44 | + { |
| 45 | + $uri = strtok($request->getUriString(), '?') . '/'; |
| 46 | + if ($uri !== false) { |
| 47 | + if ($pathInfo === '') { |
| 48 | + $pathInfo = parse_url($uri, PHP_URL_PATH); |
| 49 | + if ($pathInfo === false) { |
| 50 | + return ''; |
42 | 51 | } |
43 | | - $pathInfo = $pathInfo === false ? $this->resolveByWebUrl($uri) : $this->resolveByLinkUrl($uri); |
44 | | - $pathInfo = $pathInfo === '' ? $originalPathInfo : $pathInfo; |
| 52 | + $pathInfo = strtok($pathInfo, '/'); |
45 | 53 | } |
| 54 | + $pathInfo = $pathInfo === false ? $this->resolveByWebUrl($uri) : $this->resolveByLinkUrl($uri); |
46 | 55 | } |
47 | 56 |
|
48 | | - return [$request, $pathInfo]; |
| 57 | + return $pathInfo; |
49 | 58 | } |
50 | 59 |
|
51 | 60 | private function resolveByLinkUrl(string $uri): string |
|
0 commit comments