Nette Documentation Preview

syntax
Обновление
**********


Обновление до версии 3.4
========================

Минимально требуемая версия PHP - 8.3.

- метод `Request::isSameSite()` объявлен устаревшим в пользу `isFrom()`, который определяет источник запроса по заголовкам `Sec-Fetch-*`. Автоматическая защита форм и сигналов становится точнее, и одно поведение меняется: прямой переход (закладка, вручную введённый адрес, ссылка в письме) больше не считается same-site. Если сигнал полагается на ссылки-действия в письмах, пометьте его атрибутом `#[Requires(sameOrigin: false)]`.
- cookie `_nss` теперь отправляется только браузерам, которые не отправляют заголовок `Sec-Fetch-Site`
- `setCookie()` отправляет атрибут `Max-Age` и принудительно ставит флаг `Secure` для `SameSite=None` и для секционированных cookie
- перечисление `SameSite` заменяет константы `IResponse::SameSiteLax` и им подобные, которые объявлены устаревшими
- срок действия везде истолковывается одинаково: число - это относительное количество секунд, строка - интервал или дата. Передача абсолютной временной метки UNIX объявлена устаревшей, а сессионную cookie обозначает `null` вместо `0`.
- устаревший метод `Request::getRemoteHost()` возвращает `null`
- давно устаревший класс `Nette\Http\UserStorage` был удалён

Вся история перехода на заголовки `Sec-Fetch-*` рассказана в статье [Четверть века CSRF |https://blog.nette.org/en/quarter-century-of-csrf].


Обновление до версии 3.2
========================

- учётные данные из HTTP Basic Authentication больше не входят в объект `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
========================

- cookie отправляются с флагом `sameSite: Lax`
- `cookieSecure` теперь по умолчанию равен 'auto'
- параметр `session.cookieSecure` объявлен устаревшим, вместо него используется `http.cookieSecure`
- cookie `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()` возвращает пару `[width, height]`
- при `autoStart: smart` (по умолчанию) сессия больше не запускается сразу после старта приложения только потому, что браузер отправил сессионную cookie; она запускается при первом чтении или записи. Добавлены значения `always` и `never`.
- когда браузер отправляет ID сессии, для которого сессии не существует, Nette удаляет cookie вместо создания новой сессии
- для доступа к секциям сессии предпочитайте методы `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() объявлен устаревшим в пользу isFrom(), который определяет источник запроса по заголовкам Sec-Fetch-*. Автоматическая защита форм и сигналов становится точнее, и одно поведение меняется: прямой переход (закладка, вручную введённый адрес, ссылка в письме) больше не считается same-site. Если сигнал полагается на ссылки-действия в письмах, пометьте его атрибутом #[Requires(sameOrigin: false)].
  • cookie _nss теперь отправляется только браузерам, которые не отправляют заголовок Sec-Fetch-Site
  • setCookie() отправляет атрибут Max-Age и принудительно ставит флаг Secure для SameSite=None и для секционированных cookie
  • перечисление SameSite заменяет константы IResponse::SameSiteLax и им подобные, которые объявлены устаревшими
  • срок действия везде истолковывается одинаково: число – это относительное количество секунд, строка – интервал или дата. Передача абсолютной временной метки UNIX объявлена устаревшей, а сессионную cookie обозначает null вместо 0.
  • устаревший метод Request::getRemoteHost() возвращает null
  • давно устаревший класс Nette\Http\UserStorage был удалён

Вся история перехода на заголовки Sec-Fetch-* рассказана в статье Четверть века CSRF.

Обновление до версии 3.2

  • учётные данные из HTTP Basic Authentication больше не входят в объект Url, поэтому $url->getUser() и $url->getPassword() возвращают пустую строку. Считывайте их новым методом $request->getBasicCredentials().

Причины этого изменения объясняются в статье Nette Http 3.2: изменение доступа к учётным данным.

Обновление до версии 3.1

  • cookie отправляются с флагом sameSite: Lax
  • cookieSecure теперь по умолчанию равен ‚auto‘
  • параметр session.cookieSecure объявлен устаревшим, вместо него используется http.cookieSecure
  • cookie 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() возвращает пару [width, height]
  • при autoStart: smart (по умолчанию) сессия больше не запускается сразу после старта приложения только потому, что браузер отправил сессионную cookie; она запускается при первом чтении или записи. Добавлены значения always и never.
  • когда браузер отправляет ID сессии, для которого сессии не существует, Nette удаляет cookie вместо создания новой сессии
  • для доступа к секциям сессии предпочитайте методы set(), get() и remove(); в отличие от обращения через свойства они правильно различают чтение и запись и не запускают сессию без надобности
  • значения по умолчанию для cookiePath и cookieDomain можно задать в конфигурации

Поведение сессий подробно описано в статье 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