Αναλυτής και κατασκευαστής 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
υλοποιεί τη διεπαφή JsonSerializable
και παρέχει τη
μέθοδο __toString()
, καθιστώντας δυνατή την εκτύπωση του
αντικειμένου ή τη χρήση του με το json_encode()
.
echo $url;
echo json_encode([$url]);
URL Components
Οι ακόλουθες μέθοδοι είναι διαθέσιμες για τη λήψη ή την αλλαγή μεμονωμένων στοιχείων 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): string
Επιστρέφει το δεξί ή το αριστερό μέρος του κεντρικού υπολογιστή. Εδώ
είναι πώς λειτουργεί αν ο κεντρικός υπολογιστής είναι
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
Ελέγχει αν δύο URL είναι πανομοιότυπα.
$url->isEqual('https://nette.org');
Url::isAbsolute (string $url): bool
Ελέγχει αν μια διεύθυνση URL είναι απόλυτη. Μια διεύθυνση URL θεωρείται απόλυτη αν αρχίζει με ένα σχήμα (π.χ. http, https, ftp) ακολουθούμενο από μια άνω και κάτω τελεία.
Url::isAbsolute('https://nette.org'); // true
Url::isAbsolute('//nette.org'); // false
Url::removeDotSegments (string $path): string
Κανονικοποιεί μια διαδρομή URL αφαιρώντας τα ειδικά τμήματα .
και ..
. Αυτή η μέθοδος αφαιρεί τα περιττά στοιχεία της διαδρομής
με τον ίδιο τρόπο που το κάνουν και οι φυλλομετρητές.
Url::removeDotSegments('/path/../subtree/./file.txt'); // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar'); // '/foo/bar'
Url::removeDotSegments('./today/../file.txt'); // 'file.txt'
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'
Η κλάση UrlImmutable
υλοποιεί τη διεπαφή JsonSerializable
και
παρέχει τη μέθοδο __toString()
, επιτρέποντάς σας να εκτυπώσετε το
αντικείμενο ή να το χρησιμοποιήσετε με τη μέθοδο json_encode()
.
echo $url;
echo json_encode([$url]);
URL Components
Οι ακόλουθες μέθοδοι είναι διαθέσιμες για να λαμβάνετε ή να αλλάζετε μεμονωμένα στοιχεία 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 |
Η μέθοδος withoutUserInfo()
αφαιρεί τα user
και password
.
Μπορούμε επίσης να λειτουργήσουμε με μεμονωμένες παραμέτρους ερωτήματος χρησιμοποιώντας:
Wither | Getter |
---|---|
withQuery(string|array $query) |
getQueryParameters(): array |
withQueryParameter(string $name, $val) |
getQueryParameter(string $name) |
getDomain (int $level = 2): string
Επιστρέφει το δεξί ή το αριστερό μέρος του κεντρικού υπολογιστή. Εδώ
είναι πώς λειτουργεί αν ο κεντρικός υπολογιστής είναι
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. - Εάν ο σύνδεσμος αρχίζει με
/
, δημιουργείται μια απόλυτη διαδρομή από τη ρίζα του τομέα. - Σε άλλες περιπτώσεις, η διεύθυνση URL κατασκευάζεται σχετικά με την τρέχουσα διαδρομή.
$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
Ελέγχει αν δύο διευθύνσεις URL είναι πανομοιότυπες.
$url->isEqual('https://nette.org');
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() το επιστρέφει.