Nette Documentation Preview

syntax
Απόκριση HTTP
*************

.[perex]
Η Nette ενθυλακώνει την απόκριση HTTP σε αντικείμενα με κατανοητό API παρέχοντας παράλληλα ένα φίλτρο εξυγίανσης.

Μια απόκριση HTTP είναι ένα αντικείμενο [api:Nette\Http\Response], το οποίο λαμβάνετε περνώντας το με τη χρήση [dependency injection |dependency-injection:passing-dependencies]. Σε παρουσιαστές απλά καλείτε το `$httpResponse = $this->getHttpResponse()`.

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


Nette\Http\Response .[#toc-nette-http-response]
===============================================

Σε αντίθεση με το [Nette\Http\Request |request], αυτό το αντικείμενο είναι μεταβλητό, οπότε μπορείτε να χρησιμοποιήσετε ρυθμιστές για να αλλάξετε την κατάσταση, δηλαδή να στείλετε κεφαλίδες. Να θυμάστε ότι όλοι οι ρυθμιστές **πρέπει να κληθούν πριν από την αποστολή της πραγματικής εξόδου.** Η μέθοδος `isSent()` δηλώνει αν η έξοδος έχει σταλεί. Εάν επιστρέφει `true`, κάθε προσπάθεια αποστολής κεφαλίδας προκαλεί μια εξαίρεση `Nette\InvalidStateException`.


setCode(int $code, string $reason=null) .[method]
-------------------------------------------------
Αλλάζει έναν [κωδικό απόκρισης |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10] κατάστασης. Για καλύτερη αναγνωσιμότητα του πηγαίου κώδικα συνιστάται η χρήση [προκαθορισμένων σταθερών |api:Nette\Http\IResponse] αντί πραγματικών αριθμών.

```php
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
```


getCode(): int .[method]
------------------------
Επιστρέφει τον κωδικό κατάστασης της απάντησης.


isSent(): bool .[method]
------------------------
Επιστρέφει εάν οι επικεφαλίδες έχουν ήδη σταλεί από τον διακομιστή στο πρόγραμμα περιήγησης, οπότε δεν είναι πλέον δυνατή η αποστολή επικεφαλίδων ή η αλλαγή του κωδικού κατάστασης.


setHeader(string $name, string $value) .[method]
------------------------------------------------
Αποστέλλει μια επικεφαλίδα HTTP και **αντικαθιστά** την προηγουμένως αποσταλείσα επικεφαλίδα με το ίδιο όνομα.

```php
$httpResponse->setHeader('Pragma', 'no-cache');
```


addHeader(string $name, string $value) .[method]
------------------------------------------------
Αποστέλλει μια επικεφαλίδα HTTP και **δεν αντικαθιστά** την προηγουμένως αποσταλείσα επικεφαλίδα με το ίδιο όνομα.

```php
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
```


deleteHeader(string $name) .[method]
------------------------------------
Διαγράφει μια κεφαλίδα HTTP που έχει αποσταλεί προηγουμένως.


getHeader(string $header): ?string .[method]
--------------------------------------------
Επιστρέφει την αποσταλείσα επικεφαλίδα HTTP ή `null` εάν δεν υπάρχει. Η παράμετρος δεν λαμβάνει υπόψη την πεζότητα.

```php
$pragma = $httpResponse->getHeader('Pragma');
```


getHeaders(): array .[method]
-----------------------------
Επιστρέφει όλες τις αποσταλμένες επικεφαλίδες HTTP ως συσχετιστικό πίνακα.

```php
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
```


setContentType(string $type, string $charset=null) .[method]
------------------------------------------------------------
Αποστέλλει την επικεφαλίδα `Content-Type`.

```php
$httpResponse->setContentType('text/plain', 'UTF-8');
```


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Ανακατευθύνει σε άλλη διεύθυνση URL. Μην ξεχάσετε να τερματίσετε το σενάριο στη συνέχεια.

```php
$httpResponse->redirect('http://example.com');
exit;
```


setExpiration(?string $time) .[method]
--------------------------------------
Ορίζει τη λήξη του εγγράφου HTTP χρησιμοποιώντας τις επικεφαλίδες `Cache-Control` και `Expires`. Η παράμετρος είναι είτε ένα χρονικό διάστημα (ως κείμενο) είτε το `null`, το οποίο απενεργοποιεί την προσωρινή αποθήκευση.

```php
// η προσωρινή μνήμη cache του προγράμματος περιήγησης λήγει σε μία ώρα
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Η απάντηση θα πρέπει να μεταφορτωθεί με το παράθυρο διαλόγου *Save as* με το καθορισμένο όνομα. Δεν στέλνει κανένα αρχείο στην έξοδο.

```php
$httpResponse->sendAsFile('invoice.pdf');
```


setCookie(string $name, string $value, $time, string $path=null, string $domain=null, bool $secure=null, bool $httpOnly=null, string $sameSite=null) .[method]
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Αποστέλλει ένα cookie. Προεπιλεγμένες τιμές παραμέτρων:

| `$path` | `'/'` | με εμβέλεια σε όλες τις διαδρομές στον (υπο)τομέα *(διαμορφώσιμο)*
| `$domain` | `null` | με πεδίο εφαρμογής τον τρέχοντα (υπο)τομέα, αλλά όχι τους υποτομείς του *(διαμορφώσιμο)*
| `$secure` | `true` | αν ο ιστότοπος λειτουργεί σε HTTPS, διαφορετικά `false` *(διαμορφώσιμο)*
| `$httpOnly` | `true` | το cookie δεν είναι προσβάσιμο σε JavaScript
| `$sameSite` | `'Lax'` | το cookie δεν χρειάζεται να αποστέλλεται όταν η [πρόσβαση γίνεται από άλλη προέλευση |nette:glossary#SameSite cookie]

Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές των παραμέτρων `$path`, `$domain` και `$secure` στο [configuration |configuration#HTTP cookie].

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

```php
$httpResponse->setCookie('lang', 'en', '100 days');
```

Η επιλογή `$domain` καθορίζει ποιοι τομείς (προέλευση) μπορούν να δέχονται cookies. Αν δεν καθοριστεί, το cookie γίνεται αποδεκτό από τον ίδιο (υπο)τομέα που έχει οριστεί από αυτό, εξαιρουμένων των υποτομέων τους. Εάν καθοριστεί η επιλογή `$domain`, τότε συμπεριλαμβάνονται και τα subdomains. Επομένως, ο προσδιορισμός του `$domain` είναι λιγότερο περιοριστικός από την παράλειψη. Για παράδειγμα, εάν `$domain = 'nette.org'`, το cookie είναι επίσης διαθέσιμο σε όλα τα subdomains όπως το `doc.nette.org`.

Μπορείτε να χρησιμοποιήσετε τις σταθερές `Response::SameSiteLax`, `SameSiteStrict` και `SameSiteNone` για την τιμή `$sameSite`.


deleteCookie(string $name, string $path=null, string $domain=null, bool $secure=null): void .[method]
-----------------------------------------------------------------------------------------------------
Διαγράφει ένα cookie. Οι προεπιλεγμένες τιμές των παραμέτρων είναι:
- `$path` με εμβέλεια σε όλους τους καταλόγους (`'/'`)
- `$domain` με πεδίο εφαρμογής τον τρέχοντα (υπο)τομέα, αλλά όχι τους υποτομείς του
- Το `$secure` επηρεάζεται από τις ρυθμίσεις στο [configuration#HTTP cookie |configuration#HTTP cookie]

```php
$httpResponse->deleteCookie('lang');
```

Απόκριση HTTP

Η Nette ενθυλακώνει την απόκριση HTTP σε αντικείμενα με κατανοητό API παρέχοντας παράλληλα ένα φίλτρο εξυγίανσης.

Μια απόκριση HTTP είναι ένα αντικείμενο Nette\Http\Response, το οποίο λαμβάνετε περνώντας το με τη χρήση dependency injection. Σε παρουσιαστές απλά καλείτε το $httpResponse = $this->getHttpResponse().

Εγκατάσταση και απαιτήσεις

Nette\Http\Response

Σε αντίθεση με το Nette\Http\Request, αυτό το αντικείμενο είναι μεταβλητό, οπότε μπορείτε να χρησιμοποιήσετε ρυθμιστές για να αλλάξετε την κατάσταση, δηλαδή να στείλετε κεφαλίδες. Να θυμάστε ότι όλοι οι ρυθμιστές πρέπει να κληθούν πριν από την αποστολή της πραγματικής εξόδου. Η μέθοδος isSent() δηλώνει αν η έξοδος έχει σταλεί. Εάν επιστρέφει true, κάθε προσπάθεια αποστολής κεφαλίδας προκαλεί μια εξαίρεση Nette\InvalidStateException.

setCode(int $code, string $reason=null)

Αλλάζει έναν κωδικό απόκρισης κατάστασης. Για καλύτερη αναγνωσιμότητα του πηγαίου κώδικα συνιστάται η χρήση προκαθορισμένων σταθερών αντί πραγματικών αριθμών.

$httpResponse->setCode(Nette\Http\Response::S404_NotFound);

getCode(): int

Επιστρέφει τον κωδικό κατάστασης της απάντησης.

isSent(): bool

Επιστρέφει εάν οι επικεφαλίδες έχουν ήδη σταλεί από τον διακομιστή στο πρόγραμμα περιήγησης, οπότε δεν είναι πλέον δυνατή η αποστολή επικεφαλίδων ή η αλλαγή του κωδικού κατάστασης.

setHeader(string $name, string $value)

Αποστέλλει μια επικεφαλίδα HTTP και αντικαθιστά την προηγουμένως αποσταλείσα επικεφαλίδα με το ίδιο όνομα.

$httpResponse->setHeader('Pragma', 'no-cache');

addHeader(string $name, string $value)

Αποστέλλει μια επικεφαλίδα HTTP και δεν αντικαθιστά την προηγουμένως αποσταλείσα επικεφαλίδα με το ίδιο όνομα.

$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');

deleteHeader(string $name)

Διαγράφει μια κεφαλίδα HTTP που έχει αποσταλεί προηγουμένως.

getHeader(string $header): ?string

Επιστρέφει την αποσταλείσα επικεφαλίδα HTTP ή null εάν δεν υπάρχει. Η παράμετρος δεν λαμβάνει υπόψη την πεζότητα.

$pragma = $httpResponse->getHeader('Pragma');

getHeaders(): array

Επιστρέφει όλες τις αποσταλμένες επικεφαλίδες HTTP ως συσχετιστικό πίνακα.

$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];

setContentType(string $type, string $charset=null)

Αποστέλλει την επικεφαλίδα Content-Type.

$httpResponse->setContentType('text/plain', 'UTF-8');

redirect(string $url, int $code=self::S302_Found)void

Ανακατευθύνει σε άλλη διεύθυνση URL. Μην ξεχάσετε να τερματίσετε το σενάριο στη συνέχεια.

$httpResponse->redirect('http://example.com');
exit;

setExpiration(?string $time)

Ορίζει τη λήξη του εγγράφου HTTP χρησιμοποιώντας τις επικεφαλίδες Cache-Control και Expires. Η παράμετρος είναι είτε ένα χρονικό διάστημα (ως κείμενο) είτε το null, το οποίο απενεργοποιεί την προσωρινή αποθήκευση.

// η προσωρινή μνήμη cache του προγράμματος περιήγησης λήγει σε μία ώρα
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

Η απάντηση θα πρέπει να μεταφορτωθεί με το παράθυρο διαλόγου Save as με το καθορισμένο όνομα. Δεν στέλνει κανένα αρχείο στην έξοδο.

$httpResponse->sendAsFile('invoice.pdf');

setCookie(string $name, string $value, $time, string $path=null, string $domain=null, bool $secure=null, bool $httpOnly=null, string $sameSite=null)

Αποστέλλει ένα cookie. Προεπιλεγμένες τιμές παραμέτρων:

$path '/' με εμβέλεια σε όλες τις διαδρομές στον (υπο)τομέα (διαμορφώσιμο)
$domain null με πεδίο εφαρμογής τον τρέχοντα (υπο)τομέα, αλλά όχι τους υποτομείς του (διαμορφώσιμο)
$secure true αν ο ιστότοπος λειτουργεί σε HTTPS, διαφορετικά false (διαμορφώσιμο)
$httpOnly true το cookie δεν είναι προσβάσιμο σε JavaScript
$sameSite 'Lax' το cookie δεν χρειάζεται να αποστέλλεται όταν η πρόσβαση γίνεται από άλλη προέλευση

Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές των παραμέτρων $path, $domain και $secure στο configuration.

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

$httpResponse->setCookie('lang', 'en', '100 days');

Η επιλογή $domain καθορίζει ποιοι τομείς (προέλευση) μπορούν να δέχονται cookies. Αν δεν καθοριστεί, το cookie γίνεται αποδεκτό από τον ίδιο (υπο)τομέα που έχει οριστεί από αυτό, εξαιρουμένων των υποτομέων τους. Εάν καθοριστεί η επιλογή $domain, τότε συμπεριλαμβάνονται και τα subdomains. Επομένως, ο προσδιορισμός του $domain είναι λιγότερο περιοριστικός από την παράλειψη. Για παράδειγμα, εάν $domain = 'nette.org', το cookie είναι επίσης διαθέσιμο σε όλα τα subdomains όπως το doc.nette.org.

Μπορείτε να χρησιμοποιήσετε τις σταθερές Response::SameSiteLax, SameSiteStrict και SameSiteNone για την τιμή $sameSite.

deleteCookie(string $name, string $path=null, string $domain=null, bool $secure=null)void

Διαγράφει ένα cookie. Οι προεπιλεγμένες τιμές των παραμέτρων είναι:

  • $path με εμβέλεια σε όλους τους καταλόγους ('/')
  • $domain με πεδίο εφαρμογής τον τρέχοντα (υπο)τομέα, αλλά όχι τους υποτομείς του
  • Το $secure επηρεάζεται από τις ρυθμίσεις στο configuration#HTTP cookie
$httpResponse->deleteCookie('lang');