Nette Documentation Preview

syntax
Upgrade
*******


Upgrade na verzi 3.4
====================

Minimální požadovaná verze PHP je 8.3.

- metoda `Request::isSameSite()` je zastaralá ve prospěch `isFrom()`, která původ požadavku zjišťuje z hlaviček `Sec-Fetch-*`. Automatická ochrana formulářů a signálů se tím zpřesní a mění se jedno chování: přímá navigace (záložka, ručně zadaná adresa, odkaz z e-mailu) se už za same-site nepovažuje. Pokud nějaký signál spoléhá na akční odkazy v e-mailech, označte jej `#[Requires(sameOrigin: false)]`.
- cookie `_nss` se nyní posílá pouze prohlížečům, které neposílají hlavičku `Sec-Fetch-Site`
- `setCookie()` posílá atribut `Max-Age` a pro `SameSite=None` a partitioned cookie vynutí příznak `Secure`
- enum `SameSite` nahrazuje konstanty `IResponse::SameSiteLax` apod., které jsou zastaralé
- expirace se všude vykládá shodně: číslo je relativní počet sekund, text je interval nebo datum. Předávání absolutního UNIX timestampu je zastaralé a session cookie představuje hodnota `null` místo `0`.
- zastaralá metoda `Request::getRemoteHost()` vrací `null`
- dávno zastaralá třída `Nette\Http\UserStorage` byla odstraněna

Celý příběh přechodu na hlavičky `Sec-Fetch-*` vypráví článek [Čtvrt století s CSRF |https://blog.nette.org/cs/csrf-konecne-resi-prohlizec].


Upgrade na verzi 3.2
====================

- přihlašovací údaje z HTTP Basic Authentication už nejsou součástí objektu `Url`, takže `$url->getUser()` a `$url->getPassword()` vracejí prázdný řetězec. Přečtete je novou metodou `$request->getBasicCredentials()`.

Důvody této změny vysvětluje článek [Nette Http 3.2: změna přístupu ke credentials |https://blog.nette.org/cs/nette-http-3-2-zmena-pristupu-ke-credentials].


Upgrade na verzi 3.1
====================

- cookie jsou odesílány s příznakem `sameSite: Lax`
- `cookieSecure` je nyní defaultně 'auto'
- volba `session.cookieSecure` je zastaralá, místo ní se používá `http.cookieSecure`
- cookie `nette-samesite` přejmenováno na `_nss`
- `Nette\Http\Request::getFile()` přijímá pole klíčů a vrací `FileUpload|null`
- `Nette\Http\Session::getCookieParameters()` je zastaralý
- `Nette\Http\FileUpload::getName()` přejmenována na `getUntrustedName()`
- `Nette\Http\Url`: `getBasePath()`, `getBaseUrl()` a `getRelativeUrl()` jsou zastaralé (tyto metody jsou součástí `UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` je zastaralé
- `Nette\Http\FileUpload::getImageSize()` vrací dvojici `[width, height]`
- při `autoStart: smart` (výchozí hodnota) se session už nestartuje hned po startu aplikace jen proto, že prohlížeč poslal session cookie; nastartuje se až při prvním čtení nebo zápisu. Přibyly hodnoty `always` a `never`.
- pokud prohlížeč pošle session ID, kterému neodpovídá žádná session, Nette cookie smaže místo toho, aby zakládalo novou session
- pro přístup k sekcím session preferujte metody `set()`, `get()` a `remove()`; na rozdíl od přístupu k proměnným správně rozlišují čtení od zápisu a zbytečně nestartují session
- výchozí hodnoty `cookiePath` a `cookieDomain` lze nastavit v konfiguraci

Chování session podrobně popisuje článek [Nette Http 3.1: mnohem chytřejší sessions |https://blog.nette.org/cs/nette-http-3-1-mnohem-chytrejsi-sessions].


Upgrade na verzi 3.0
====================

- objekt `Nette\Http\UrlScript` (který vrací třeba `Nette\Http\Request::getUrl()`) je nyní immutable
- v zápisu `new Nette\Http\Url('abcd')` představuje `abcd` cestu, nikoliv doménu; od verze 3.0 tedy `(new Nette\Http\Url('abcd'))->setScheme('http')` korektně vygeneruje `http:abcd` místo dřívějšího `http://abcd`

Upgrade

Upgrade na verzi 3.4

Minimální požadovaná verze PHP je 8.3.

  • metoda Request::isSameSite() je zastaralá ve prospěch isFrom(), která původ požadavku zjišťuje z hlaviček Sec-Fetch-*. Automatická ochrana formulářů a signálů se tím zpřesní a mění se jedno chování: přímá navigace (záložka, ručně zadaná adresa, odkaz z e-mailu) se už za same-site nepovažuje. Pokud nějaký signál spoléhá na akční odkazy v e-mailech, označte jej #[Requires(sameOrigin: false)].
  • cookie _nss se nyní posílá pouze prohlížečům, které neposílají hlavičku Sec-Fetch-Site
  • setCookie() posílá atribut Max-Age a pro SameSite=None a partitioned cookie vynutí příznak Secure
  • enum SameSite nahrazuje konstanty IResponse::SameSiteLax apod., které jsou zastaralé
  • expirace se všude vykládá shodně: číslo je relativní počet sekund, text je interval nebo datum. Předávání absolutního UNIX timestampu je zastaralé a session cookie představuje hodnota null místo 0.
  • zastaralá metoda Request::getRemoteHost() vrací null
  • dávno zastaralá třída Nette\Http\UserStorage byla odstraněna

Celý příběh přechodu na hlavičky Sec-Fetch-* vypráví článek Čtvrt století s CSRF.

Upgrade na verzi 3.2

  • přihlašovací údaje z HTTP Basic Authentication už nejsou součástí objektu Url, takže $url->getUser() a $url->getPassword() vracejí prázdný řetězec. Přečtete je novou metodou $request->getBasicCredentials().

Důvody této změny vysvětluje článek Nette Http 3.2: změna přístupu ke credentials.

Upgrade na verzi 3.1

  • cookie jsou odesílány s příznakem sameSite: Lax
  • cookieSecure je nyní defaultně ‚auto‘
  • volba session.cookieSecure je zastaralá, místo ní se používá http.cookieSecure
  • cookie nette-samesite přejmenováno na _nss
  • Nette\Http\Request::getFile() přijímá pole klíčů a vrací FileUpload|null
  • Nette\Http\Session::getCookieParameters() je zastaralý
  • Nette\Http\FileUpload::getName() přejmenována na getUntrustedName()
  • Nette\Http\Url: getBasePath(), getBaseUrl() a getRelativeUrl() jsou zastaralé (tyto metody jsou součástí UrlScript)
  • Nette\Http\Response::$cookieHttpOnly je zastaralé
  • Nette\Http\FileUpload::getImageSize() vrací dvojici [width, height]
  • při autoStart: smart (výchozí hodnota) se session už nestartuje hned po startu aplikace jen proto, že prohlížeč poslal session cookie; nastartuje se až při prvním čtení nebo zápisu. Přibyly hodnoty always a never.
  • pokud prohlížeč pošle session ID, kterému neodpovídá žádná session, Nette cookie smaže místo toho, aby zakládalo novou session
  • pro přístup k sekcím session preferujte metody set(), get() a remove(); na rozdíl od přístupu k proměnným správně rozlišují čtení od zápisu a zbytečně nestartují session
  • výchozí hodnoty cookiePath a cookieDomain lze nastavit v konfiguraci

Chování session podrobně popisuje článek Nette Http 3.1: mnohem chytřejší sessions.

Upgrade na verzi 3.0

  • objekt Nette\Http\UrlScript (který vrací třeba Nette\Http\Request::getUrl()) je nyní immutable
  • v zápisu new Nette\Http\Url('abcd') představuje abcd cestu, nikoliv doménu; od verze 3.0 tedy (new Nette\Http\Url('abcd'))->setScheme('http') korektně vygeneruje http:abcd místo dřívějšího http://abcd