| 
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