Αναλυτής και κατασκευαστής URL
Οι κλάσεις Url, UrlImmutable και UrlScript διευκολύνουν τη διαχείριση, την ανάλυση και τον χειρισμό των URL.
Url
Η κλάση Nette\Http\Url διευκολύνει την εργασία με τη διεύθυνση URL και τα επιμέρους στοιχεία της, τα οποία περιγράφονται σε αυτό το διάγραμμα:
scheme user password host port path query fragment | | | | | | | | /--\ /--\ /------\ /-------\ /--\/----------\ /--------\ /----\ http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer \______\__________________________/ | | hostUrl authority
Η δημιουργία URL είναι διαισθητική:
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 και στη συνέχεια να την επεξεργαστείτε:
$url = new Url(
'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);
Οι ακόλουθες μέθοδοι είναι διαθέσιμες για να λάβετε ή να αλλάξετε μεμονωμένα στοιχεία URL:
Setter | Getter | Επιστρεφόμενη τιμή |
---|---|---|
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 |
Προειδοποίηση: Όταν εργάζεστε με μια διεύθυνση URL που λαμβάνεται από μια αίτηση HTTP, να έχετε υπόψη σας ότι δεν θα περιέχει το θραύσμα, καθώς το πρόγραμμα περιήγησης δεν το στέλνει στον διακομιστή.
Μπορούμε επίσης να λειτουργήσουμε με μεμονωμένες παραμέτρους ερωτήματος χρησιμοποιώντας:
Setter | Getter |
---|---|
setQuery(string|array $query) |
getQueryParameters(): array |
setQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
Η μέθοδος getDomain(int $level = 2)
επιστρέφει το δεξί ή το αριστερό μέρος
του κεντρικού υπολογιστή. Έτσι λειτουργεί αν ο κεντρικός υπολογιστής
είναι 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) |
'' |
Η κλάση Url
υλοποιεί τη διεπαφή JsonSerializable
και διαθέτει
μια μέθοδο __toString()
ώστε το αντικείμενο να μπορεί να εκτυπωθεί ή
να χρησιμοποιηθεί σε δεδομένα που περνούν στο json_encode()
.
echo $url;
echo json_encode([$url]);
Η μέθοδος isEqual(string|Url $anotherUrl): bool
ελέγχει αν οι δύο διευθύνσεις URL
είναι πανομοιότυπες.
$url->isEqual('https://nette.org');
UrlImmutable
Η κλάση Nette\Http\UrlImmutable είναι
μια αμετάβλητη εναλλακτική της κλάσης Url
(όπως ακριβώς στην PHP
DateTimeImmutable
είναι αμετάβλητη εναλλακτική της DateTime
). Αντί
για setters, έχει τους λεγόμενους withers, οι οποίοι δεν αλλάζουν το
αντικείμενο, αλλά επιστρέφουν νέες περιπτώσεις με
τροποποιημένη τιμή:
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'
Οι ακόλουθες μέθοδοι είναι διαθέσιμες για να λάβετε ή να αλλάξετε μεμονωμένα στοιχεία URL:
Wither | Getter | Επιστρεφόμενη τιμή |
---|---|---|
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 |
Μπορούμε επίσης να λειτουργήσουμε με μεμονωμένες παραμέτρους ερωτήματος χρησιμοποιώντας:
Wither | Getter |
---|---|
withQuery(string|array $query) |
getQueryParameters(): array |
withQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
Η μέθοδος getDomain(int $level = 2)
λειτουργεί όπως και η μέθοδος στο
Url
. Η μέθοδος withoutUserInfo()
αφαιρεί τα user
και
password
.
Η κλάση UrlImmutable
υλοποιεί τη διεπαφή JsonSerializable
και
διαθέτει μια μέθοδο __toString()
ώστε το αντικείμενο να μπορεί να
εκτυπωθεί ή να χρησιμοποιηθεί σε δεδομένα που μεταβιβάζονται στο
json_encode()
.
echo $url;
echo json_encode([$url]);
Η μέθοδος isEqual(string|Url $anotherUrl): bool
ελέγχει αν οι δύο διευθύνσεις URL
είναι πανομοιότυπες.
UrlScript
Η κλάση Nette\Http\UrlScript είναι
απόγονος της UrlImmutable
και διακρίνει επιπλέον αυτά τα λογικά μέρη
της διεύθυνσης URL:
baseUrl basePath relativePath relativeUrl | | | | /---------------/-----\/--------\---------------------------\ http://nette.org/admin/script.php/pathinfo/?name=param#footer \_______________/\________/ | | scriptPath pathInfo
Οι ακόλουθες μέθοδοι είναι διαθέσιμες για την απόκτηση αυτών των τμημάτων:
Getter | Επιστρεφόμενη τιμή |
---|---|
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/' |
Δεν δημιουργούμε άμεσα αντικείμενα UrlScript
, αλλά η μέθοδος Nette\Http\Request::getUrl() το επιστρέφει.