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