Storitev URL
Razredi Url, UrlImmutable in UrlScript omogočajo enostavno upravljanje, razčlenjevanje in manipuliranje z naslovi URL.
Url
Razred Nette\Http\Url omogoča enostavno delo z naslovom URL in njegovimi posameznimi sestavnimi deli, ki so opisani v tem diagramu:
scheme user password host port path query fragment | | | | | | | | /--\ /--\ /------\ /-------\ /--\/----------\ /--------\ /----\ http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer \______\__________________________/ | | hostUrl authority
Ustvarjanje URL je intuitivno:
use Nette\Http\Url;
$url = new Url;
$url->setScheme('https')
->setHost('localhost')
->setPath('/edit')
->setQueryParameter('foo', 'bar');
echo $url; // 'https://localhost/edit?foo=bar'
URL lahko tudi razčlenite in ga nato obdelate:
$url = new Url(
'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);
Razred Url
implementira vmesnik JsonSerializable
in zagotavlja metodo __toString()
, ki
omogoča tiskanje predmeta ali njegovo uporabo z json_encode()
.
echo $url;
echo json_encode([$url]);
URL Components
Za pridobivanje ali spreminjanje posameznih komponent URL so na voljo naslednje metode:
Setter | Getter | Vrnjena vrednost |
---|---|---|
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 |
polni URL |
Opozorilo: Pri delu z URL-jem, pridobljenim z zahtevo HTTP, upoštevajte, da ne bo vseboval fragmenta, saj ga brskalnik ne pošlje strežniku.
S posameznimi parametri poizvedbe lahko operiramo tudi z uporabo:
Setter | Getter |
---|---|
setQuery(string|array $query) |
getQueryParameters(): array |
setQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
getDomain (int $level = 2): string
Vrne desni ali levi del gostitelja. Če je gostitelj www.nette.org
, je prikazano naslednje delovanje:
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
Preveri, ali sta dva naslova URL enaka.
$url->isEqual('https://nette.org');
Url::isAbsolute (string $url): bool
Preveri, ali je naslov URL absoluten. URL se šteje za absolutnega, če se začne s shemo (npr. http, https, ftp), ki ji sledi dvopičje.
Url::isAbsolute('https://nette.org'); // true
Url::isAbsolute('//nette.org'); // false
Url::removeDotSegments (string $path): string
Normalizira pot URL z odstranitvijo posebnih segmentov .
in ..
. Ta metoda odstrani odvečne elemente
poti na enak način kot brskalniki.
Url::removeDotSegments('/path/../subtree/./file.txt'); // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar'); // '/foo/bar'
Url::removeDotSegments('./today/../file.txt'); // 'file.txt'
UrlImmutable
Razred Nette\Http\UrlImmutable je nespremenljiva
alternativa razredu Url (podobno kot je DateTimeImmutable
nespremenljiva alternativa
DateTime
v PHP). Namesto nastavljavcev ima nastavljavce, ki ne spremenijo objekta, temveč vrnejo nove primerke
s spremenjeno vrednostjo:
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'
Razred UrlImmutable
implementira vmesnik JsonSerializable
in zagotavlja metodo
__toString()
, ki omogoča tiskanje predmeta ali njegovo uporabo z json_encode()
.
echo $url;
echo json_encode([$url]);
URL Components
Za pridobivanje ali spreminjanje posameznih komponent URL so na voljo naslednje metode:
Wither | Getter | Vrnjena vrednost |
---|---|---|
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 |
polni URL |
Metoda withoutUserInfo()
odstrani user
in password
.
S posameznimi parametri poizvedbe lahko operiramo tudi z uporabo:
Wither | Getter |
---|---|
withQuery(string|array $query) |
getQueryParameters(): array |
withQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
getDomain (int $level = 2): string
Vrne desni ali levi del gostitelja. Če je gostitelj www.nette.org
, je prikazano naslednje delovanje:
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
Absolutni naslov URL rešuje na enak način, kot brskalnik obdeluje povezave na strani HTML:
- Če je povezava absolutni URL (vsebuje shemo), se uporabi nespremenjena.
- Če se povezava začne s
//
, se uporabi samo shema iz trenutnega URL-ja. - Če se povezava začne s
/
, se ustvari absolutna pot iz korena domene. - V drugih primerih se URL ustvari relativno glede na trenutno pot.
$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
Preveri, ali sta dva naslova URL enaka.
$url->isEqual('https://nette.org');
UrlScript
Razred Nette\Http\UrlScript je potomec razreda UrlImmutable in ga razširja z dodatnimi virtualnimi komponentami URL, kot je korenski imenik projekta itd. Tako kot njegov starševski razred je tudi ta nespremenljiv objekt.
Naslednji diagram prikazuje komponente, ki jih prepozna UrlScript:
baseUrl basePath relativePath relativeUrl | | | | /---------------/-----\/--------\---------------------------\ http://nette.org/admin/script.php/pathinfo/?name=param#footer \_______________/\________/ | | scriptPath pathInfo
baseUrl
je osnovni URL aplikacije, vključno z domeno in delom poti do korenskega imenika aplikacije.basePath
je del poti do korenskega imenika aplikacijescriptPath
je pot do trenutne skripterelativePath
je ime skripta (in morda dodatni segmenti poti) glede na basePathrelativeUrl
je celoten del URL-ja za baseUrl, vključno s poizvedovalnim nizom in fragmentom.pathInfo
je zdaj redko uporabljen del URL za imenom skripte
Za pridobitev teh delov so na voljo naslednje metode:
Getter | Vrnjena vrednost |
---|---|
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/' |
Ne ustvarjamo predmetov UrlScript
neposredno, ampak jih vrne metoda Nette\Http\Request::getUrl().