Nette Documentation Preview

syntax
アップグレード
*******


バージョン 3.4 へのアップグレード
=====================

必要な PHP の最小のバージョンは 8.3 です。

- `Request::isSameSite()` メソッドは非推奨になり、`Sec-Fetch-*` のヘッダーからリクエストの出どころを判断する `isFrom()` に取って代わられました。フォームとシグナルの自動の保護はより正確になり、振る舞いがひとつ変わります。直接の移動(ブックマーク、手で打ったアドレス、メールの中のリンク)は、もう同一サイトとは見なされません。シグナルがメールの中の操作のリンクに頼っているなら、`#[Requires(sameOrigin: false)]` で印を付けてください。
- `_nss` のクッキーは、`Sec-Fetch-Site` のヘッダーを送らないブラウザにだけ送られるようになりました
- `setCookie()` は `Max-Age` の属性を送り、`SameSite=None` と分割されたクッキーには `Secure` のフラグを強制します
- enum の `SameSite` が定数 `IResponse::SameSiteLax` などに取って代わり、それらは非推奨になりました
- 有効期限はどこでも同じように解釈されます。数は相対の秒数、文字列は間隔か日付です。絶対の UNIX タイムスタンプを渡すのは非推奨で、セッションのクッキーは `0` ではなく `null` で表します。
- 非推奨のメソッド `Request::getRemoteHost()` は `null` を返します
- ずっと前から非推奨だったクラス `Nette\Http\UserStorage` は取り除かれました

`Sec-Fetch-*` のヘッダーへ切り替えるまでの物語は、記事 [CSRF の四半世紀 |https://blog.nette.org/en/quarter-century-of-csrf]で語られています。


バージョン 3.2 へのアップグレード
=====================

- HTTP Basic 認証の資格情報は `Url` オブジェクトの一部ではなくなったので、`$url->getUser()` と `$url->getPassword()` は空の文字列を返します。新しいメソッド `$request->getBasicCredentials()` で読んでください。

この変更の理由は、記事 [Nette Http 3.2: 資格情報へのアクセスの変更 |https://blog.nette.org/en/nette-http-3-2-change-access-to-credentials]で説明されています。


バージョン 3.1 へのアップグレード
=====================

- クッキーは `sameSite: Lax` のフラグ付きで送られます
- `cookieSecure` の既定値は 'auto' になりました
- `session.cookieSecure` のオプションは非推奨で、代わりに `http.cookieSecure` が使われます
- `nette-samesite` のクッキーは `_nss` に改名されました
- `Nette\Http\Request::getFile()` はキーの配列を受け取り、`FileUpload|null` を返します
- `Nette\Http\Session::getCookieParameters()` は非推奨です
- `Nette\Http\FileUpload::getName()` は `getUntrustedName()` に改名されました
- `Nette\Http\Url`: `getBasePath()`、`getBaseUrl()`、`getRelativeUrl()` は非推奨です(これらのメソッドは `UrlScript` の一部です)
- `Nette\Http\Response::$cookieHttpOnly` は非推奨です
- `Nette\Http\FileUpload::getImageSize()` は組 `[幅, 高さ]` を返します
- `autoStart: smart`(既定)では、ブラウザがセッションのクッキーを送ったというだけで、アプリケーションの開始直後にセッションが始まることはもうありません。最初の読み書きのときに始まります。値 `always` と `never` が足されました。
- ブラウザが、存在しないセッションの ID を送ってきた場合、Nette は新しいセッションを作る代わりにそのクッキーを消します
- セッションの区画へのアクセスには `set()`、`get()`、`remove()` のメソッドを使ってください。プロパティへのアクセスと違って、読みと書きを正しく見分け、必要もないのにセッションを始めません
- `cookiePath` と `cookieDomain` の既定値は設定で決められます

セッションの振る舞いは、記事 [Nette Http 3.1: ずっと賢くなったセッション |https://blog.nette.org/en/nette-http-3-1-much-smarter-sessions]で詳しく説明されています。


バージョン 3.0 へのアップグレード
=====================

- `Nette\Http\UrlScript` のオブジェクト(たとえば `Nette\Http\Request::getUrl()` が返すもの)は変更できなくなりました
- `new Nette\Http\Url('abcd')` では `abcd` はドメインではなくパスを表します。3.0 からは `(new Nette\Http\Url('abcd'))->setScheme('http')` が、以前の `http://abcd` ではなく正しく `http:abcd` を生成します

アップグレード

バージョン 3.4 へのアップグレード

必要な PHP の最小のバージョンは 8.3 です。

  • Request::isSameSite() メソッドは非推奨になり、Sec-Fetch-* のヘッダーからリクエストの出どころを判断する isFrom() に取って代わられました。フォームとシグナルの自動の保護はより正確になり、振る舞いがひとつ変わります。直接の移動(ブックマーク、手で打ったアドレス、メールの中のリンク)は、もう同一サイトとは見なされません。シグナルがメールの中の操作のリンクに頼っているなら、#[Requires(sameOrigin: false)] で印を付けてください。
  • _nss のクッキーは、Sec-Fetch-Site のヘッダーを送らないブラウザにだけ送られるようになりました
  • setCookie()Max-Age の属性を送り、SameSite=None と分割されたクッキーには Secure のフラグを強制します
  • enum の SameSite が定数 IResponse::SameSiteLax などに取って代わり、それらは非推奨になりました
  • 有効期限はどこでも同じように解釈されます。数は相対の秒数、文字列は間隔か日付です。絶対の UNIX タイムスタンプを渡すのは非推奨で、セッションのクッキーは 0 ではなく null で表します。
  • 非推奨のメソッド Request::getRemoteHost()null を返します
  • ずっと前から非推奨だったクラス Nette\Http\UserStorage は取り除かれました

Sec-Fetch-* のヘッダーへ切り替えるまでの物語は、記事 CSRF の四半世紀で語られています。

バージョン 3.2 へのアップグレード

  • HTTP Basic 認証の資格情報は Url オブジェクトの一部ではなくなったので、$url->getUser()$url->getPassword() は空の文字列を返します。新しいメソッド $request->getBasicCredentials() で読んでください。

この変更の理由は、記事 Nette Http 3.2: 資格情報へのアクセスの変更で説明されています。

バージョン 3.1 へのアップグレード

  • クッキーは sameSite: Lax のフラグ付きで送られます
  • cookieSecure の既定値は ‚auto‘ になりました
  • session.cookieSecure のオプションは非推奨で、代わりに http.cookieSecure が使われます
  • nette-samesite のクッキーは _nss に改名されました
  • Nette\Http\Request::getFile() はキーの配列を受け取り、FileUpload|null を返します
  • Nette\Http\Session::getCookieParameters() は非推奨です
  • Nette\Http\FileUpload::getName()getUntrustedName() に改名されました
  • Nette\Http\Url: getBasePath()getBaseUrl()getRelativeUrl() は非推奨です(これらのメソッドは UrlScript の一部です)
  • Nette\Http\Response::$cookieHttpOnly は非推奨です
  • Nette\Http\FileUpload::getImageSize() は組 [幅, 高さ] を返します
  • autoStart: smart(既定)では、ブラウザがセッションのクッキーを送ったというだけで、アプリケーションの開始直後にセッションが始まることはもうありません。最初の読み書きのときに始まります。値 alwaysnever が足されました。
  • ブラウザが、存在しないセッションの ID を送ってきた場合、Nette は新しいセッションを作る代わりにそのクッキーを消します
  • セッションの区画へのアクセスには set()get()remove() のメソッドを使ってください。プロパティへのアクセスと違って、読みと書きを正しく見分け、必要もないのにセッションを始めません
  • cookiePathcookieDomain の既定値は設定で決められます

セッションの振る舞いは、記事 Nette Http 3.1: ずっと賢くなったセッションで詳しく説明されています。

バージョン 3.0 へのアップグレード

  • Nette\Http\UrlScript のオブジェクト(たとえば Nette\Http\Request::getUrl() が返すもの)は変更できなくなりました
  • new Nette\Http\Url('abcd') では abcd はドメインではなくパスを表します。3.0 からは (new Nette\Http\Url('abcd'))->setScheme('http') が、以前の http://abcd ではなく正しく http:abcd を生成します