URL elemző és építő
Az Url, UrlImmutable és UrlScript osztályok megkönnyítik az URL-ek kezelését, elemzését és manipulálását.
Url
A Nette\Http\Url osztály megkönnyíti az URL-rel és annak egyes összetevőivel való munkát, amelyeket ez az ábra vázol fel:
scheme user password host port path query fragment | | | | | | | | /--\ /--\ /------\ /-------\ /--\/----------\ /--------\ /----\ http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer \______\__________________________/ | | hostUrl authority
Az URL generálása intuitív:
use Nette\Http\Url;
$url = new Url;
$url->setScheme('https')
->setHost('localhost')
->setPath('/edit')
->setQueryParameter('foo', 'bar');
echo $url; // 'https://localhost/edit?foo=bar'
Az URL-t is elemezheti, majd manipulálhatja:
$url = new Url(
'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);
A következő módszerek állnak rendelkezésre az egyes URL-komponensek lekérdezéséhez vagy módosításához:
Setter | Getter | Visszatérő érték |
---|---|---|
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 |
teljes URL |
Figyelmeztetés: Ha egy HTTP-kérésből kapott URL-címmel dolgozol, ne feledd, hogy az nem tartalmazza a töredéket, mivel a böngésző nem küldi el a kiszolgálónak.
Az egyes lekérdezési paraméterekkel is operálhatunk a következőkkel:
Setter | Getter |
---|---|
setQuery(string|array $query) |
getQueryParameters(): array |
setQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
A getDomain(int $level = 2)
metódus a gazdatest jobb vagy bal oldalát adja vissza. Így működik, ha az
állomás a 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) |
'' |
A Url
osztály megvalósítja a JsonSerializable
interfészt, és rendelkezik egy
__toString()
metódussal, hogy az objektumot ki lehessen nyomtatni, vagy felhasználni a
json_encode()
-nak átadott adatokban.
echo $url;
echo json_encode([$url]);
A isEqual(string|Url $anotherUrl): bool
metódus azt vizsgálja, hogy a két URL azonos-e.
$url->isEqual('https://nette.org');
UrlImmutable
A Nette\Http\UrlImmutable osztály a
Url
osztály megváltoztathatatlan alternatívája (ahogyan a PHP-ben a DateTimeImmutable
a
DateTime
megváltoztathatatlan alternatívája). Setterek helyett úgynevezett witherekkel rendelkezik, amelyek nem
változtatják meg az objektumot, hanem új példányokat adnak vissza a módosított értékkel:
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'
A következő metódusok állnak rendelkezésre az egyes URL-összetevők kinyerésére vagy megváltoztatására:
Wither | Getter | Visszaadott érték |
---|---|---|
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 |
teljes URL |
Az egyes lekérdezési paraméterekkel is operálhatunk a következőkkel:
Wither | Getter |
---|---|
withQuery(string|array $query) |
getQueryParameters(): array |
withQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
A getDomain(int $level = 2)
módszer ugyanúgy működik, mint a Url
módszer. A
withoutUserInfo()
módszer eltávolítja a user
és a password
címet.
A UrlImmutable
osztály megvalósítja a JsonSerializable
interfészt, és rendelkezik egy
__toString()
metódussal, hogy az objektumot ki lehessen nyomtatni, vagy fel lehessen használni a
json_encode()
-nak átadott adatokban.
echo $url;
echo json_encode([$url]);
A isEqual(string|Url $anotherUrl): bool
metódus azt vizsgálja, hogy a két URL azonos-e.
UrlScript
A Nette\Http\UrlScript osztály a
UrlImmutable
leszármazottja, és ezen felül megkülönbözteti az URL ezen logikai részeit:
baseUrl basePath relativePath relativeUrl | | | | /---------------/-----\/--------\---------------------------\ http://nette.org/admin/script.php/pathinfo/?name=param#footer \_______________/\________/ | | scriptPath pathInfo
A következő metódusok állnak rendelkezésre ezen részek lekérdezéséhez:
Getter | Visszaadott érték |
---|---|
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/' |
A UrlScript
objektumokat nem közvetlenül hozzuk létre, hanem a Nette\Http\Request::getUrl() metódus adja vissza.