Utilitar URL

Clasele Url, UrlImmutable și UrlScript facilitează gestionarea, analiza și manipularea URL-urilor.

Instalare și cerințe

Url

Clasa Nette\Http\Url facilitează lucrul cu URL-ul și cu componentele sale individuale, care sunt prezentate în această diagramă:

scheme  user  password  host   port    path        query  fragment
  |      |      |        |      |       |            |       |
/--\   /--\ /------\ /-------\ /--\/----------\ /--------\ /----\
http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer
\______\__________________________/
    |               |
 hostUrl        authority

Generarea URL-urilor este intuitivă:

use Nette\Http\Url;

$url = new Url;
$url->setScheme('https')
	->setHost('localhost')
	->setPath('/edit')
	->setQueryParameter('foo', 'bar');

echo $url; // 'https://localhost/edit?foo=bar'

Puteți, de asemenea, să analizați URL-ul și apoi să îl manipulați:

$url = new Url(
	'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);

Clasa Url implementează interfața JsonSerializable și furnizează metoda __toString(), făcând posibilă imprimarea obiectului sau utilizarea acestuia cu json_encode().

echo $url;
echo json_encode([$url]);

URL Components

Următoarele metode sunt disponibile pentru a obține sau a modifica componente URL individuale:

Setter | Getter | Getter | Valoare returnată

setScheme(string $scheme) getScheme(): string 'http'
setUser(string $user) getUser(): string 'john'
setPassword(string $password) getPassword(): string 'xyz*12'
setHost(string $host) getHost(): string 'nette.org'
setPort(int $port) getPort(): ?int 8080
  getDefaultPort(): ?int 80
setPath(string $path) getPath(): string '/en/download'
setQuery(string|array $query) getQuery(): string 'name=param'
setFragment(string $fragment) getFragment(): string 'footer'
  getAuthority(): string 'nette.org:8080'
  getHostUrl(): string 'http://nette.org:8080'
  getAbsoluteUrl(): string URL complet

Avertisment: Atunci când lucrați cu o adresă URL obținută în urma unei cereri HTTP, rețineți că aceasta nu va conține fragmentul, deoarece browserul nu îl trimite către server.

De asemenea, putem opera cu parametri de interogare individuali folosind:

Setter Getter
setQuery(string|array $query) getQueryParameters(): array
setQueryParameter(string $name, $val) getQueryParameter(string $name)

getDomain (int $level = 2)string

Returnează partea dreaptă sau stângă a gazdei. Iată cum funcționează dacă gazda este www.nette.org:

getDomain(1) 'org'
getDomain(2) 'nette.org'
getDomain(3) 'www.nette.org'
getDomain(0) 'www.nette.org'
getDomain(-1) 'www.nette'
getDomain(-2) 'www'
getDomain(-3) ''

isEqual (string|Url $anotherUrl)bool

Verifică dacă două URL-uri sunt identice.

$url->isEqual('https://nette.org');

Url::isAbsolute (string $url)bool

Verifică dacă un URL este absolut. Un URL este considerat absolut dacă începe cu o schemă (de exemplu, http, https, ftp) urmată de două puncte.

Url::isAbsolute('https://nette.org');    // true
Url::isAbsolute('//nette.org');          // false

Url::removeDotSegments (string $path)string

Normalizează o cale URL prin eliminarea segmentelor speciale . și ... Această metodă elimină elementele redundante ale căii în același mod în care o fac browserele.

Url::removeDotSegments('/path/../subtree/./file.txt');  // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar');                // '/foo/bar'
Url::removeDotSegments('./today/../file.txt');          // 'file.txt'

UrlImmutable

Clasa Nette\Http\UrlImmutable este o alternativă imuabilă la clasa Url (similar cu modul în care DateTimeImmutable este o alternativă imuabilă la DateTime în PHP). În loc de setteri, aceasta are witheri, care nu modifică obiectul, ci returnează instanțe noi cu valoarea modificată:

use Nette\Http\UrlImmutable;

$url = new UrlImmutable(
	'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);

$newUrl = $url
	->withUser('')
	->withPassword('')
	->withPath('/en/');

echo $newUrl; // 'http://nette.org:8080/en/?name=param#footer'

Clasa UrlImmutable implementează interfața JsonSerializable și furnizează metoda __toString(), permițându-vă să tipăriți obiectul sau să îl utilizați cu json_encode().

echo $url;
echo json_encode([$url]);

URL Components

Următoarele metode sunt disponibile pentru a obține sau a modifica componente URL individuale:

Wither | Getter | Getter | Valoare returnată

withScheme(string $scheme) getScheme(): string 'http'
withUser(string $user) getUser(): string 'john'
withPassword(string $password) getPassword(): string 'xyz*12'
withHost(string $host) getHost(): string 'nette.org'
withPort(int $port) getPort(): ?int 8080
  getDefaultPort(): ?int 80
withPath(string $path) getPath(): string '/en/download'
withQuery(string|array $query) getQuery(): string 'name=param'
withFragment(string $fragment) getFragment(): string 'footer'
  getAuthority(): string 'nette.org:8080'
  getHostUrl(): string 'http://nette.org:8080'
  getAbsoluteUrl(): string URL complet

Metoda withoutUserInfo() elimină user și password.

De asemenea, putem opera cu parametrii de interogare individuali utilizând:

Wither Getter
withQuery(string|array $query) getQueryParameters(): array
withQueryParameter(string $name, $val) getQueryParameter(string $name)

getDomain (int $level = 2)string

Returnează partea dreaptă sau stângă a gazdei. Iată cum funcționează dacă gazda este www.nette.org:

getDomain(1) 'org'
getDomain(2) 'nette.org'
getDomain(3) 'www.nette.org'
getDomain(0) 'www.nette.org'
getDomain(-1) 'www.nette'
getDomain(-2) 'www'
getDomain(-3) ''

resolve (string $reference): UrlImmutable

Rezolvă un URL absolut în același mod în care un browser procesează linkurile de pe o pagină HTML:

  • Dacă link-ul este un URL absolut (conține o schemă), acesta este utilizat neschimbat.
  • Dacă legătura începe cu //, se aplică numai schema din URL-ul curent.
  • Dacă legătura începe cu /, se creează o cale absolută de la rădăcina domeniului.
  • În celelalte cazuri, URL-ul este construit relativ la calea curentă.
$url = new UrlImmutable('https://example.com/path/page');
echo $url->resolve('../foo');           // 'https://example.com/foo'
echo $url->resolve('/bar');             // 'https://example.com/bar'
echo $url->resolve('sub/page.html');    // 'https://example.com/path/sub/page.html'

isEqual (string|Url $anotherUrl)bool

Verifică dacă două URL-uri sunt identice.

$url->isEqual('https://nette.org');

UrlScript

Clasa Nette\Http\UrlScript este un descendent al UrlImmutable și îl extinde cu componente URL virtuale suplimentare, cum ar fi directorul rădăcină al proiectului etc. Ca și clasa sa mamă, este un obiect imuabil.

Diagrama următoare prezintă componentele pe care UrlScript le recunoaște:

     baseUrl    basePath  relativePath  relativeUrl
        |          |        |               |
/---------------/-----\/--------\---------------------------\
http://nette.org/admin/script.php/pathinfo/?name=param#footer
                \_______________/\________/
                       |              |
                  scriptPath       pathInfo
  • baseUrl este URL-ul de bază al aplicației, inclusiv domeniul și o parte din calea către directorul rădăcină al aplicației
  • basePath este o parte din calea către directorul rădăcină al aplicației
  • scriptPath este calea către scriptul curent
  • relativePath este numele scriptului (și, eventual, segmente de cale suplimentare) în raport cu basePath
  • relativeUrl este întreaga parte a URL-ului după baseUrl, inclusiv șirul de interogare și fragmentul.
  • pathInfo este o parte a URL-ului utilizată rar după numele scriptului

Următoarele metode sunt disponibile pentru a obține aceste părți:

Getter Valoare returnată
getScriptPath(): string '/admin/script.php'
getBasePath(): string '/admin/'
getBaseUrl(): string 'http://nette.org/admin/'
getRelativePath(): string 'script.php'
getRelativeUrl(): string 'script.php/pathinfo/?name=param#footer'
getPathInfo(): string '/pathinfo/'

Nu creăm obiecte UrlScript direct, dar metoda Nette\Http\Request::getUrl() îl returnează.

versiune: 4.0