URL Parser și Builder

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',
);

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)

Metoda getDomain(int $level = 2) 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) ''

Clasa Url implementează interfața JsonSerializable și are o metodă __toString(), astfel încât obiectul poate fi tipărit sau utilizat în datele transmise către json_encode().

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

Metoda isEqual(string|Url $anotherUrl): bool testează dacă cele două URL-uri sunt identice.

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

UrlImmutable

Clasa Nette\Http\UrlImmutable este o alternativă imuabilă la clasa Url (la fel cum în PHP DateTimeImmutable este o alternativă imuabilă la DateTime). În loc de setters, aceasta are așa-numitele withers, care nu modifică obiectul, ci returnează noi instanțe cu o valoare 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'

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

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

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

Metoda getDomain(int $level = 2) funcționează la fel ca și metoda din Url. Metoda withoutUserInfo() elimină user și password.

Clasa UrlImmutable implementează interfața JsonSerializable și are o metodă __toString() pentru ca obiectul să poată fi tipărit sau utilizat în datele transmise către json_encode().

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

Metoda isEqual(string|Url $anotherUrl): bool testează dacă cele două URL-uri sunt identice.

UrlScript

Clasa Nette\Http\UrlScript este un descendent al UrlImmutable și distinge în plus aceste părți logice ale URL-ului:

     baseUrl    basePath  relativePath  relativeUrl
        |          |        |               |
/---------------/-----\/--------\---------------------------\
http://nette.org/admin/script.php/pathinfo/?name=param#footer
                \_______________/\________/
                       |              |
                  scriptPath       pathInfo

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