Απόκριση HTTP

Το Nette ενσωματώνει την απόκριση HTTP σε αντικείμενα με ένα κατανοητό API.

Η απόκριση HTTP αντιπροσωπεύεται από το αντικείμενο Nette\Http\Response. Εάν εργάζεστε με το Nette, αυτό το αντικείμενο δημιουργείται αυτόματα από το framework και μπορείτε να το λάβετε μέσω έγχυσης εξάρτησης. Στους presenters, απλά καλέστε τη μέθοδο $this->getHttpResponse().

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

Nette\Http\Response

Το αντικείμενο, σε αντίθεση με το Nette\Http\Request, είναι μεταβλητό (mutable), οπότε μπορείτε να αλλάξετε την κατάσταση χρησιμοποιώντας setters, π.χ. να στείλετε κεφαλίδες. Θυμηθείτε ότι όλοι οι setters πρέπει να κληθούν πριν από την αποστολή οποιασδήποτε εξόδου. Η μέθοδος 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)

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

$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 '/' το cookie έχει εμβέλεια σε όλες τις διαδρομές στο (υπο)domain (διαμορφώσιμο)
$domain null που σημαίνει με εμβέλεια στο τρέχον (υπο)domain, αλλά όχι στα υποdomains του (διαμορφώσιμο)
$secure true εάν ο ιστότοπος εκτελείται σε HTTPS, διαφορετικά false (διαμορφώσιμο)
$httpOnly true το cookie δεν είναι προσβάσιμο από JavaScript
$sameSite 'Lax' το cookie μπορεί να μην αποσταλεί κατά την πρόσβαση από άλλο domain

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

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

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

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

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

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

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

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