. */ namespace SP\Core\Bootstrap; use SP\Domain\Core\Bootstrap\UriContextInterface; use SP\Domain\Http\RequestInterface; /** * Class UriContext */ final readonly class UriContext implements UriContextInterface { private string $subUri; private string $webRoot; private string $webUri; public function __construct(RequestInterface $request) { $this->subUri = $this->buildSubUri($request); $this->webRoot = $this->buildWebRoot($request); $this->webUri = $request->getHttpHost() . $this->webRoot; } private function buildSubUri(RequestInterface $request): string { return '/' . basename($request->getServer('SCRIPT_FILENAME')); } private function buildWebRoot(RequestInterface $request): string { $uri = $request->getServer('REQUEST_URI'); $pos = strpos($uri, $this->subUri); if ($pos > 0) { return substr($uri, 0, $pos); } return ''; } public function getWebUri(): string { return $this->webUri; } public function getWebRoot(): string { return $this->webRoot; } public function getSubUri(): string { return $this->subUri; } }