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

έκδοση: 4.0