URL-ekkel való munka
Az Url, UrlImmutable és UrlScript osztályok lehetővé teszik az URL-ek egyszerű generálását, elemzését és manipulálását.
Url
A Nette\Http\Url osztály lehetővé teszi az URL-ekkel és azok egyes komponenseivel való egyszerű munkát, amelyeket ez a rajz ábrázol:
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('http')
->setHost('localhost')
->setPath('/edit')
->setQueryParameter('foo', 'bar');
echo $url; // 'http://localhost/edit?foo=bar'
Lehetőség van az URL elemzésére és további manipulálására is:
$url = new Url(
'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);
A Url
osztály implementálja a JsonSerializable
interfészt, és rendelkezik a
__toString()
metódussal, így az objektumot ki lehet írni, vagy fel lehet használni a
json_encode()
-nak átadott adatokban.
echo $url;
echo json_encode([$url]);
URL komponensek
Az URL egyes komponenseinek visszaadására vagy megváltoztatására a következő metódusok állnak rendelkezésre:
Setter | Getter | Visszaadott é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 |
'john:xyz%2A12@nette.org:8080' |
|
getHostUrl(): string |
'http://john:xyz%2A12@nette.org:8080' |
|
getAbsoluteUrl(): string |
teljes URL |
Figyelmeztetés: Amikor olyan URL-lel dolgozik, amelyet a HTTP kérésből szereztek be, vegye figyelembe, hogy nem fogja tartalmazni a fragmentet, mivel a böngésző nem küldi el azt a szerverre.
Az egyes query paraméterekkel is dolgozhatunk a következők segítségével:
Setter | Getter |
---|---|
setQuery(string|array $query) |
getQueryParameters(): array |
setQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
getDomain (int $level = 2): string
Visszaadja a hoszt jobb vagy bal részét. Így működik, ha a hoszt 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
Ellenőrzi, hogy két URL megegyezik-e.
$url->isEqual('http://nette.org');
Url::isAbsolute (string $url): bool
Ellenőrzi, hogy az URL abszolút-e. Az URL abszolútnak tekintendő, ha sémával kezdődik (pl. http, http, ftp), amelyet kettőspont követ.
Url::isAbsolute('http://nette.org'); // true
Url::isAbsolute('//nette.org'); // false
Url::removeDotSegments (string $path): string
Normalizálja az URL elérési útját a speciális .
és ..
szegmensek eltávolításával.
A metódus eltávolítja a felesleges elérési út elemeket ugyanúgy, ahogy a webböngészők teszik.
Url::removeDotSegments('/path/../subtree/./file.txt'); // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar'); // '/foo/bar'
Url::removeDotSegments('./today/../file.txt'); // 'file.txt'
UrlImmutable
A Nette\Http\UrlImmutable osztály az Url osztály immutable (megváltoztathatatlan) alternatívája (hasonlóan ahhoz, ahogy a PHP-ban a
DateTimeImmutable
a DateTime
megváltoztathatatlan alternatívája). Setterek helyett ún. withereket
használ, amelyek nem változtatják meg az objektumot, hanem új példányokat adnak vissza 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('/cs/');
echo $newUrl; // 'http://john:xyz%2A12@nette.org:8080/cs/?name=param#footer'
A UrlImmutable
osztály implementálja a JsonSerializable
interfészt, és rendelkezik a
__toString()
metódussal, így az objektumot ki lehet írni, vagy fel lehet használni a
json_encode()
-nak átadott adatokban.
echo $url;
echo json_encode([$url]);
URL komponensek
Az URL egyes komponenseinek visszaadására vagy megváltoztatására a következő metódusok szolgálnak:
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 |
'john:xyz%2A12@nette.org:8080' |
|
getHostUrl(): string |
'http://john:xyz%2A12@nette.org:8080' |
|
getAbsoluteUrl(): string |
teljes URL |
A withoutUserInfo()
metódus eltávolítja a user
-t és a password
-öt.
Az egyes query paraméterekkel is dolgozhatunk a következők segítségével:
Wither | Getter |
---|---|
withQuery(string|array $query) |
getQueryParameters(): array |
withQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
getDomain (int $level = 2): string
Visszaadja a hoszt jobb vagy bal részét. Így működik, ha a hoszt 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
Abszolút URL-t vezet le ugyanúgy, ahogy a böngésző feldolgozza a HTML oldalon lévő linkeket:
- ha a link abszolút URL (sémát tartalmaz), változatlanul használja
- ha a link
//
-vel kezdődik, csak a sémát veszi át az aktuális URL-ből - ha a link
/
-vel kezdődik, abszolút elérési utat hoz létre a domain gyökerétől - egyéb esetekben az URL-t relatívan állítja össze az aktuális elérési úthoz képest
$url = new UrlImmutable('http://example.com/path/page');
echo $url->resolve('../foo'); // 'http://example.com/foo'
echo $url->resolve('/bar'); // 'http://example.com/bar'
echo $url->resolve('sub/page.html'); // 'http://example.com/path/sub/page.html'
isEqual (string|Url $anotherUrl): bool
Ellenőrzi, hogy két URL megegyezik-e.
$url->isEqual('http://nette.org');
UrlScript
A Nette\Http\UrlScript osztály az UrlImmutable leszármazottja, és további virtuális URL komponensekkel bővíti ki, mint például a projekt gyökérkönyvtára stb. Ugyanúgy, mint a szülő osztálya, immutable (megváltoztathatatlan) objektum.
A következő diagram azokat a komponenseket ábrázolja, amelyeket az UrlScript felismer:
baseUrl basePath relativePath relativeUrl | | | | /---------------/-----\/--------\---------------------------\ http://nette.org/admin/script.php/pathinfo/?name=param#footer \_______________/\________/ | | scriptPath pathInfo
baseUrl
az alkalmazás alap URL címe, beleértve a domaint és az alkalmazás gyökérkönyvtárához vezető útvonalrésztbasePath
az alkalmazás gyökérkönyvtárához vezető útvonalrészscriptPath
az aktuális szkripthez vezető útvonalrelativePath
a szkript neve (esetleg további útvonalszegmensek) a basePath-hoz képest relatívanrelativeUrl
az URL teljes része a baseUrl után, beleértve a query stringet és a fragmentet.pathInfo
ma már ritkán használt URL rész a szkript neve után
Az URL részeinek visszaadására a következő metódusok állnak rendelkezésre:
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/' |
Az UrlScript
objektumokat általában nem közvetlenül hozzuk létre, hanem a Nette\Http\Request::getUrl() metódus adja vissza őket már helyesen
beállított komponensekkel az aktuális HTTP kéréshez.