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:

.[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

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

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

Η μέθοδος `getDomain(int $level = 2)` επιστρέφει το δεξί ή το αριστερό μέρος του κεντρικού υπολογιστή. Έτσι λειτουργεί αν ο κεντρικός υπολογιστής είναι `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)` | `''`


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

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

Η μέθοδος `isEqual(string|Url $anotherUrl): bool` ελέγχει αν οι δύο διευθύνσεις URL είναι πανομοιότυπες.

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


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'
```

Οι ακόλουθες μέθοδοι είναι διαθέσιμες για να λάβετε ή να αλλάξετε μεμονωμένα στοιχεία 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

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

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

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

Η μέθοδος `isEqual(string|Url $anotherUrl): bool` ελέγχει αν οι δύο διευθύνσεις URL είναι πανομοιότυπες.


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:

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

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

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