Βοηθητικό πρόγραμμα 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 (παρόμοια με το πώς η DateTimeImmutable είναι μια αμετάβλητη εναλλακτική της DateTime στην PHP). Αντί για setters, έχει withers, οι οποίοι δεν αλλάζουν το αντικείμενο αλλά επιστρέφουν νέα instances με την τροποποιημένη τιμή:

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, όπως ο ριζικός κατάλογος του έργου κ.λπ. Όπως και η γονική της κλάση, είναι ένα αμετάβλητο αντικείμενο.

Το ακόλουθο διάγραμμα δείχνει τα συστατικά που αναγνωρίζει η UrlScript:

     baseUrl    basePath  relativePath  relativeUrl
        |          |        |               |
/---------------/-----\/--------\---------------------------\
http://nette.org/admin/script.php/pathinfo/?name=param#footer
                \_______________/\________/
                       |              |
                  scriptPath       pathInfo
  • baseUrl είναι η βασική διεύθυνση URL της εφαρμογής, συμπεριλαμβανομένου του τομέα και μέρους της διαδρομής προς τον ριζικό κατάλογο της εφαρμογής.
  • basePath είναι μέρος της διαδρομής προς τον ριζικό κατάλογο της εφαρμογής.
  • scriptPath είναι η διαδρομή προς την τρέχουσα δέσμη ενεργειών
  • relativePath είναι το όνομα της δέσμης ενεργειών (και ενδεχομένως πρόσθετα τμήματα της διαδρομής) σε σχέση με το basePath
  • relativeUrl είναι ολόκληρο το τμήμα της διεύθυνσης URL μετά το baseUrl, συμπεριλαμβανομένης της συμβολοσειράς ερωτήματος και του τμήματος.
  • pathInfo είναι ένα σπάνια χρησιμοποιούμενο πλέον τμήμα της διεύθυνσης 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() το επιστρέφει.

έκδοση: 4.0