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.

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

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