Nette Documentation Preview

syntax
Upgrade
*******


Upgrade auf Version 3.4
=======================

Die mindestens erforderliche PHP-Version ist 8.3.

- die Methode `Request::isSameSite()` ist zugunsten von `isFrom()` veraltet, das die Herkunft des Requests anhand der `Sec-Fetch-*`-Header bestimmt. Der automatische Schutz von Formularen und Signalen wird dadurch genauer, und ein Verhalten ändert sich: Direkte Navigation (ein Lesezeichen, eine von Hand eingetippte Adresse, ein Link in einer E-Mail) gilt nicht mehr als Same-Site. Wenn ein Signal auf Aktionslinks in E-Mails angewiesen ist, kennzeichnen Sie es mit `#[Requires(sameOrigin: false)]`.
- das Cookie `_nss` wird nun nur noch an Browser gesendet, die den Header `Sec-Fetch-Site` nicht senden
- `setCookie()` sendet das Attribut `Max-Age` und erzwingt das Flag `Secure` für `SameSite=None` und für partitionierte Cookies
- das Enum `SameSite` ersetzt die Konstanten `IResponse::SameSiteLax` usw., die veraltet sind
- die Ablaufzeit wird überall gleich interpretiert: Eine Zahl ist eine relative Anzahl von Sekunden, ein String ein Intervall oder ein Datum. Die Übergabe eines absoluten UNIX-Timestamps ist veraltet, und ein Session-Cookie wird durch `null` statt `0` dargestellt.
- die veraltete Methode `Request::getRemoteHost()` gibt `null` zurück
- die seit Langem veraltete Klasse `Nette\Http\UserStorage` wurde entfernt

Die ganze Geschichte der Umstellung auf die `Sec-Fetch-*`-Header erzählt der Artikel [Quarter Century of CSRF |https://blog.nette.org/en/quarter-century-of-csrf].


Upgrade auf Version 3.2
=======================

- die Zugangsdaten aus der HTTP-Basic-Authentifizierung sind nicht mehr Teil des `Url`-Objekts, `$url->getUser()` und `$url->getPassword()` geben also einen leeren String zurück. Lesen Sie sie mit der neuen Methode `$request->getBasicCredentials()`.

Die Gründe für diese Änderung erklärt der Artikel [Nette Http 3.2: change access to credentials |https://blog.nette.org/en/nette-http-3-2-change-access-to-credentials].


Upgrade auf Version 3.1
=======================

- Cookies werden mit dem Flag `sameSite: Lax` gesendet
- `cookieSecure` hat nun den Standardwert 'auto'
- die Option `session.cookieSecure` ist veraltet; stattdessen wird `http.cookieSecure` verwendet
- das Cookie `nette-samesite` wurde in `_nss` umbenannt
- `Nette\Http\Request::getFile()` nimmt ein Array von Schlüsseln entgegen und gibt `FileUpload|null` zurück
- `Nette\Http\Session::getCookieParameters()` ist veraltet
- `Nette\Http\FileUpload::getName()` wurde in `getUntrustedName()` umbenannt
- `Nette\Http\Url`: `getBasePath()`, `getBaseUrl()` und `getRelativeUrl()` sind veraltet (diese Methoden gehören zu `UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` ist veraltet
- `Nette\Http\FileUpload::getImageSize()` gibt das Paar `[Breite, Höhe]` zurück
- mit `autoStart: smart` (dem Standard) startet die Session nicht mehr gleich nach dem Start der Anwendung, nur weil der Browser ein Session-Cookie gesendet hat; sie startet beim ersten Lesen oder Schreiben. Die Werte `always` und `never` kamen hinzu.
- wenn der Browser eine Session-ID sendet, zu der keine Session existiert, löscht Nette das Cookie, statt eine neue Session anzulegen
- für den Zugriff auf Session-Abschnitte sind die Methoden `set()`, `get()` und `remove()` vorzuziehen; anders als der Zugriff über Properties unterscheiden sie korrekt zwischen Lesen und Schreiben und starten die Session nicht unnötig
- die Standardwerte von `cookiePath` und `cookieDomain` lassen sich in der Konfiguration setzen

Das Verhalten der Sessions beschreibt der Artikel [Nette Http 3.1: much smarter sessions |https://blog.nette.org/en/nette-http-3-1-much-smarter-sessions] ausführlich.


Upgrade auf Version 3.0
=======================

- das Objekt `Nette\Http\UrlScript` (das z. B. `Nette\Http\Request::getUrl()` zurückgibt) ist nun unveränderlich
- in `new Nette\Http\Url('abcd')` steht `abcd` für den Pfad, nicht für die Domain; seit 3.0 erzeugt `(new Nette\Http\Url('abcd'))->setScheme('http')` korrekt `http:abcd` statt des früheren `http://abcd`

Upgrade

Upgrade auf Version 3.4

Die mindestens erforderliche PHP-Version ist 8.3.

  • die Methode Request::isSameSite() ist zugunsten von isFrom() veraltet, das die Herkunft des Requests anhand der Sec-Fetch-*-Header bestimmt. Der automatische Schutz von Formularen und Signalen wird dadurch genauer, und ein Verhalten ändert sich: Direkte Navigation (ein Lesezeichen, eine von Hand eingetippte Adresse, ein Link in einer E-Mail) gilt nicht mehr als Same-Site. Wenn ein Signal auf Aktionslinks in E-Mails angewiesen ist, kennzeichnen Sie es mit #[Requires(sameOrigin: false)].
  • das Cookie _nss wird nun nur noch an Browser gesendet, die den Header Sec-Fetch-Site nicht senden
  • setCookie() sendet das Attribut Max-Age und erzwingt das Flag Secure für SameSite=None und für partitionierte Cookies
  • das Enum SameSite ersetzt die Konstanten IResponse::SameSiteLax usw., die veraltet sind
  • die Ablaufzeit wird überall gleich interpretiert: Eine Zahl ist eine relative Anzahl von Sekunden, ein String ein Intervall oder ein Datum. Die Übergabe eines absoluten UNIX-Timestamps ist veraltet, und ein Session-Cookie wird durch null statt 0 dargestellt.
  • die veraltete Methode Request::getRemoteHost() gibt null zurück
  • die seit Langem veraltete Klasse Nette\Http\UserStorage wurde entfernt

Die ganze Geschichte der Umstellung auf die Sec-Fetch-*-Header erzählt der Artikel Quarter Century of CSRF.

Upgrade auf Version 3.2

  • die Zugangsdaten aus der HTTP-Basic-Authentifizierung sind nicht mehr Teil des Url-Objekts, $url->getUser() und $url->getPassword() geben also einen leeren String zurück. Lesen Sie sie mit der neuen Methode $request->getBasicCredentials().

Die Gründe für diese Änderung erklärt der Artikel Nette Http 3.2: change access to credentials.

Upgrade auf Version 3.1

  • Cookies werden mit dem Flag sameSite: Lax gesendet
  • cookieSecure hat nun den Standardwert ‚auto‘
  • die Option session.cookieSecure ist veraltet; stattdessen wird http.cookieSecure verwendet
  • das Cookie nette-samesite wurde in _nss umbenannt
  • Nette\Http\Request::getFile() nimmt ein Array von Schlüsseln entgegen und gibt FileUpload|null zurück
  • Nette\Http\Session::getCookieParameters() ist veraltet
  • Nette\Http\FileUpload::getName() wurde in getUntrustedName() umbenannt
  • Nette\Http\Url: getBasePath(), getBaseUrl() und getRelativeUrl() sind veraltet (diese Methoden gehören zu UrlScript)
  • Nette\Http\Response::$cookieHttpOnly ist veraltet
  • Nette\Http\FileUpload::getImageSize() gibt das Paar [Breite, Höhe] zurück
  • mit autoStart: smart (dem Standard) startet die Session nicht mehr gleich nach dem Start der Anwendung, nur weil der Browser ein Session-Cookie gesendet hat; sie startet beim ersten Lesen oder Schreiben. Die Werte always und never kamen hinzu.
  • wenn der Browser eine Session-ID sendet, zu der keine Session existiert, löscht Nette das Cookie, statt eine neue Session anzulegen
  • für den Zugriff auf Session-Abschnitte sind die Methoden set(), get() und remove() vorzuziehen; anders als der Zugriff über Properties unterscheiden sie korrekt zwischen Lesen und Schreiben und starten die Session nicht unnötig
  • die Standardwerte von cookiePath und cookieDomain lassen sich in der Konfiguration setzen

Das Verhalten der Sessions beschreibt der Artikel Nette Http 3.1: much smarter sessions ausführlich.

Upgrade auf Version 3.0

  • das Objekt Nette\Http\UrlScript (das z. B. Nette\Http\Request::getUrl() zurückgibt) ist nun unveränderlich
  • in new Nette\Http\Url('abcd') steht abcd für den Pfad, nicht für die Domain; seit 3.0 erzeugt (new Nette\Http\Url('abcd'))->setScheme('http') korrekt http:abcd statt des früheren http://abcd