Nette Documentation Preview

syntax
Αναλυτής και κατασκευαστής URL
******************************

.[perex]
Οι κλάσεις [Url |#Url], [UrlImmutable |#UrlImmutable] και [UrlScript |#UrlScript] διευκολύνουν τη διαχείριση, την ανάλυση και τον χειρισμό των URL.

→ [Εγκατάσταση και απαιτήσεις |@home#Installation]


Url
===

Η κλάση [api:Nette\Http\Url] διευκολύνει την εργασία με τη διεύθυνση URL και τα επιμέρους στοιχεία της, τα οποία περιγράφονται σε αυτό το διάγραμμα:

/--pre
 scheme  user  password  host   port    path        query  fragment
   |      |      |        |      |       |            |       |
 /--\   /--\ /------\ /-------\ /--\/----------\ /--------\ /----\
 <b>http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer</b>
 \______\__________________________/
     |               |
  hostUrl        authority
\--

Η δημιουργία URL είναι διαισθητική:

```php
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 και στη συνέχεια να την επεξεργαστείτε:

```php
$url = new Url(
	'http://john:xyz%2A12@nette.org:8080/en/download?name=param#footer',
);
```

Η κλάση `Url` υλοποιεί τη διεπαφή `JsonSerializable` και παρέχει τη μέθοδο `__toString()`, καθιστώντας δυνατή την εκτύπωση του αντικειμένου ή τη χρήση του με το `json_encode()`.

```php
echo $url;
echo json_encode([$url]);
```


URL Components .[method]
------------------------

Οι ακόλουθες μέθοδοι είναι διαθέσιμες για τη λήψη ή την αλλαγή μεμονωμένων στοιχείων URL:

.[language-php]
| 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 |request], να έχετε υπόψη σας ότι δεν θα περιέχει το θραύσμα, καθώς το πρόγραμμα περιήγησης δεν το στέλνει στον διακομιστή.

Μπορούμε επίσης να λειτουργήσουμε με μεμονωμένες παραμέτρους ερωτήματος χρησιμοποιώντας:

.[language-php]
| Setter | Getter
|---------------------------------------------------
| `setQuery(string\|array $query)` | `getQueryParameters(): array`
| `setQueryParameter(string $name, $val)`| `getQueryParameter(string $name)`


getDomain(int $level = 2): string .[method]
-------------------------------------------
Επιστρέφει το δεξί ή το αριστερό μέρος του κεντρικού υπολογιστή. Εδώ είναι πώς λειτουργεί αν ο κεντρικός υπολογιστής είναι `www.nette.org`:

.[language-php]
| `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 .[method]
-----------------------------------------------
Ελέγχει αν δύο URL είναι πανομοιότυπα.

```php
$url->isEqual('https://nette.org');
```


Url::isAbsolute(string $url): bool .[method]{data-version:3.3.2}
----------------------------------------------------------------
Ελέγχει αν μια διεύθυνση URL είναι απόλυτη. Μια διεύθυνση URL θεωρείται απόλυτη αν αρχίζει με ένα σχήμα (π.χ. http, https, ftp) ακολουθούμενο από μια άνω και κάτω τελεία.

```php
Url::isAbsolute('https://nette.org');    // true
Url::isAbsolute('//nette.org');          // false
```


Url::removeDotSegments(string $path): string .[method]{data-version:3.3.2}
--------------------------------------------------------------------------
Κανονικοποιεί μια διαδρομή URL αφαιρώντας τα ειδικά τμήματα `.` και `..`. Αυτή η μέθοδος αφαιρεί τα περιττά στοιχεία της διαδρομής με τον ίδιο τρόπο που το κάνουν και οι φυλλομετρητές.

```php
Url::removeDotSegments('/path/../subtree/./file.txt');  // '/subtree/file.txt'
Url::removeDotSegments('/../foo/./bar');                // '/foo/bar'
Url::removeDotSegments('./today/../file.txt');          // 'file.txt'
```


UrlImmutable .[#toc-urlimmutable]
=================================

Η κλάση [api:Nette\Http\UrlImmutable] είναι μια αμετάβλητη εναλλακτική της κλάσης `Url` (όπως ακριβώς στην PHP `DateTimeImmutable` είναι αμετάβλητη εναλλακτική της `DateTime`). Αντί για setters, έχει τους λεγόμενους withers, οι οποίοι δεν αλλάζουν το αντικείμενο, αλλά επιστρέφουν νέες περιπτώσεις με τροποποιημένη τιμή:

```php
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()`.

```php
echo $url;
echo json_encode([$url]);
```


URL Components .[method]
------------------------

Οι ακόλουθες μέθοδοι είναι διαθέσιμες για να λαμβάνετε ή να αλλάζετε μεμονωμένα στοιχεία URL:

.[language-php]
| 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`.

Μπορούμε επίσης να λειτουργήσουμε με μεμονωμένες παραμέτρους ερωτήματος χρησιμοποιώντας:

.[language-php]
| Wither | Getter
|-----------------------------------------------
| `withQuery(string\|array $query)` | `getQueryParameters(): array`
| `withQueryParameter(string $name, $val)` | `getQueryParameter(string $name)`


getDomain(int $level = 2): string .[method]
-------------------------------------------
Επιστρέφει το δεξί ή το αριστερό μέρος του κεντρικού υπολογιστή. Εδώ είναι πώς λειτουργεί αν ο κεντρικός υπολογιστής είναι `www.nette.org`:

.[language-php]
| `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 .[method]{data-version:3.3.2}
----------------------------------------------------------------------
Επιλύει μια απόλυτη διεύθυνση URL με τον ίδιο τρόπο που ένα πρόγραμμα περιήγησης επεξεργάζεται τους συνδέσμους σε μια σελίδα HTML:
- Εάν ο σύνδεσμος είναι μια απόλυτη διεύθυνση URL (περιέχει ένα σχήμα), χρησιμοποιείται αμετάβλητος.
- Εάν ο σύνδεσμος αρχίζει με `//`, εφαρμόζεται μόνο το σχήμα από την τρέχουσα διεύθυνση URL.
- Εάν ο σύνδεσμος αρχίζει με `/`, δημιουργείται μια απόλυτη διαδρομή από τη ρίζα του τομέα.
- Σε άλλες περιπτώσεις, η διεύθυνση URL κατασκευάζεται σχετικά με την τρέχουσα διαδρομή.

```php
$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 .[method]
-----------------------------------------------
Ελέγχει αν δύο διευθύνσεις URL είναι πανομοιότυπες.

```php
$url->isEqual('https://nette.org');
```


UrlScript .[#toc-urlscript]
===========================

Η κλάση [api:Nette\Http\UrlScript] είναι απόγονος της `UrlImmutable` και διακρίνει επιπλέον αυτά τα λογικά μέρη της διεύθυνσης URL:

/--pre
      baseUrl    basePath  relativePath  relativeUrl
         |          |        |               |
 /---------------/-----\/--------\---------------------------\
 <b>http://nette.org/admin/script.php/pathinfo/?name=param#footer</b>
                 \_______________/\________/
                        |              |
                   scriptPath       pathInfo
\--

Οι ακόλουθες μέθοδοι είναι διαθέσιμες για την απόκτηση αυτών των τμημάτων:

.[language-php]
| 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() |request] το επιστρέφει.

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