Nette Documentation Preview

syntax
Mise à niveau
*************


Mise à niveau vers la version 3.4
=================================

La version minimale de PHP requise est 8.3.

- la méthode `Request::isSameSite()` est obsolète au profit d'`isFrom()`, qui détermine l'origine de la requête à partir des en-têtes `Sec-Fetch-*`. La protection automatique des formulaires et des signaux devient plus précise, et un comportement change : la navigation directe (un favori, une adresse tapée à la main, un lien dans un e-mail) n'est plus considérée comme same-site. Si un signal repose sur des liens d'action dans des e-mails, marquez-le par `#[Requires(sameOrigin: false)]`.
- le cookie `_nss` n'est désormais envoyé qu'aux navigateurs qui n'envoient pas l'en-tête `Sec-Fetch-Site`
- `setCookie()` envoie l'attribut `Max-Age` et impose le drapeau `Secure` pour `SameSite=None` et pour les cookies partitionnés
- l'enum `SameSite` remplace les constantes `IResponse::SameSiteLax` etc., qui sont obsolètes
- l'expiration s'interprète partout de la même façon : un nombre est un nombre relatif de secondes, une chaîne est un intervalle ou une date. Passer un timestamp UNIX absolu est obsolète, et un cookie de session est représenté par `null` au lieu de `0`.
- la méthode obsolète `Request::getRemoteHost()` renvoie `null`
- la classe `Nette\Http\UserStorage`, obsolète depuis longtemps, a été supprimée

Toute l'histoire du passage aux en-têtes `Sec-Fetch-*` est racontée dans l'article [Quarter Century of CSRF |https://blog.nette.org/en/quarter-century-of-csrf].


Mise à niveau vers la version 3.2
=================================

- les identifiants de l'authentification HTTP Basic ne font plus partie de l'objet `Url`, si bien que `$url->getUser()` et `$url->getPassword()` renvoient une chaîne vide. Lisez-les à l'aide de la nouvelle méthode `$request->getBasicCredentials()`.

Les raisons de ce changement sont expliquées dans l'article [Nette Http 3.2: change access to credentials |https://blog.nette.org/en/nette-http-3-2-change-access-to-credentials].


Mise à niveau vers la version 3.1
=================================

- les cookies sont envoyés avec le drapeau `sameSite: Lax`
- `cookieSecure` vaut désormais 'auto' par défaut
- l'option `session.cookieSecure` est obsolète ; c'est `http.cookieSecure` qui est utilisée à la place
- le cookie `nette-samesite` a été renommé en `_nss`
- `Nette\Http\Request::getFile()` accepte un tableau de clés et renvoie `FileUpload|null`
- `Nette\Http\Session::getCookieParameters()` est obsolète
- `Nette\Http\FileUpload::getName()` a été renommée en `getUntrustedName()`
- `Nette\Http\Url` : `getBasePath()`, `getBaseUrl()` et `getRelativeUrl()` sont obsolètes (ces méthodes font partie d'`UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` est obsolète
- `Nette\Http\FileUpload::getImageSize()` renvoie la paire `[largeur, hauteur]`
- avec `autoStart: smart` (la valeur par défaut), la session n'est plus démarrée juste après le lancement de l'application au seul motif que le navigateur a envoyé un cookie de session ; elle démarre à la première lecture ou écriture. Les valeurs `always` et `never` ont été ajoutées.
- lorsque le navigateur envoie un ID de session pour lequel aucune session n'existe, Nette supprime le cookie au lieu de créer une nouvelle session
- pour accéder aux sections de session, préférez les méthodes `set()`, `get()` et `remove()` ; contrairement à l'accès par propriété, elles distinguent correctement la lecture de l'écriture et ne démarrent pas la session inutilement
- les valeurs par défaut de `cookiePath` et `cookieDomain` peuvent être définies dans la configuration

Le comportement des sessions est décrit en détail dans l'article [Nette Http 3.1: much smarter sessions |https://blog.nette.org/en/nette-http-3-1-much-smarter-sessions].


Mise à niveau vers la version 3.0
=================================

- l'objet `Nette\Http\UrlScript` (renvoyé par exemple par `Nette\Http\Request::getUrl()`) est désormais immuable
- dans `new Nette\Http\Url('abcd')`, `abcd` représente le chemin, pas le domaine ; depuis la 3.0, `(new Nette\Http\Url('abcd'))->setScheme('http')` génère correctement `http:abcd` au lieu du précédent `http://abcd`

Mise à niveau

Mise à niveau vers la version 3.4

La version minimale de PHP requise est 8.3.

  • la méthode Request::isSameSite() est obsolète au profit d'isFrom(), qui détermine l'origine de la requête à partir des en-têtes Sec-Fetch-*. La protection automatique des formulaires et des signaux devient plus précise, et un comportement change : la navigation directe (un favori, une adresse tapée à la main, un lien dans un e-mail) n'est plus considérée comme same-site. Si un signal repose sur des liens d'action dans des e-mails, marquez-le par #[Requires(sameOrigin: false)].
  • le cookie _nss n'est désormais envoyé qu'aux navigateurs qui n'envoient pas l'en-tête Sec-Fetch-Site
  • setCookie() envoie l'attribut Max-Age et impose le drapeau Secure pour SameSite=None et pour les cookies partitionnés
  • l'enum SameSite remplace les constantes IResponse::SameSiteLax etc., qui sont obsolètes
  • l'expiration s'interprète partout de la même façon : un nombre est un nombre relatif de secondes, une chaîne est un intervalle ou une date. Passer un timestamp UNIX absolu est obsolète, et un cookie de session est représenté par null au lieu de 0.
  • la méthode obsolète Request::getRemoteHost() renvoie null
  • la classe Nette\Http\UserStorage, obsolète depuis longtemps, a été supprimée

Toute l'histoire du passage aux en-têtes Sec-Fetch-* est racontée dans l'article Quarter Century of CSRF.

Mise à niveau vers la version 3.2

  • les identifiants de l'authentification HTTP Basic ne font plus partie de l'objet Url, si bien que $url->getUser() et $url->getPassword() renvoient une chaîne vide. Lisez-les à l'aide de la nouvelle méthode $request->getBasicCredentials().

Les raisons de ce changement sont expliquées dans l'article Nette Http 3.2: change access to credentials.

Mise à niveau vers la version 3.1

  • les cookies sont envoyés avec le drapeau sameSite: Lax
  • cookieSecure vaut désormais ‚auto‘ par défaut
  • l'option session.cookieSecure est obsolète ; c'est http.cookieSecure qui est utilisée à la place
  • le cookie nette-samesite a été renommé en _nss
  • Nette\Http\Request::getFile() accepte un tableau de clés et renvoie FileUpload|null
  • Nette\Http\Session::getCookieParameters() est obsolète
  • Nette\Http\FileUpload::getName() a été renommée en getUntrustedName()
  • Nette\Http\Url : getBasePath(), getBaseUrl() et getRelativeUrl() sont obsolètes (ces méthodes font partie d'UrlScript)
  • Nette\Http\Response::$cookieHttpOnly est obsolète
  • Nette\Http\FileUpload::getImageSize() renvoie la paire [largeur, hauteur]
  • avec autoStart: smart (la valeur par défaut), la session n'est plus démarrée juste après le lancement de l'application au seul motif que le navigateur a envoyé un cookie de session ; elle démarre à la première lecture ou écriture. Les valeurs always et never ont été ajoutées.
  • lorsque le navigateur envoie un ID de session pour lequel aucune session n'existe, Nette supprime le cookie au lieu de créer une nouvelle session
  • pour accéder aux sections de session, préférez les méthodes set(), get() et remove() ; contrairement à l'accès par propriété, elles distinguent correctement la lecture de l'écriture et ne démarrent pas la session inutilement
  • les valeurs par défaut de cookiePath et cookieDomain peuvent être définies dans la configuration

Le comportement des sessions est décrit en détail dans l'article Nette Http 3.1: much smarter sessions.

Mise à niveau vers la version 3.0

  • l'objet Nette\Http\UrlScript (renvoyé par exemple par Nette\Http\Request::getUrl()) est désormais immuable
  • dans new Nette\Http\Url('abcd'), abcd représente le chemin, pas le domaine ; depuis la 3.0, (new Nette\Http\Url('abcd'))->setScheme('http') génère correctement http:abcd au lieu du précédent http://abcd