URL Parser și Builder
Clasele Url, UrlImmutable și UrlScript facilitează gestionarea, analiza și manipularea URL-urilor.
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ă.