Αναλυτής και κατασκευαστής 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() το επιστρέφει.

έκδοση: 4.0