Přechod na verzi 3.1

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

Aktualizujte vždy postupně, takže nikoliv z Nette 2.4 na 3.1, ale nejprve na 3.0 a poté na 3.1.

Před testováním nebo nasazováním doporučujeme nejprve vypnout hlášení chyb E_USER_DEPRECATED a povolit jej, až když vše bude fungovat:

$configurator->enableTracy();
error_reporting(~E_USER_DEPRECATED); // note ~ before E_USER_DEPRECATED

Všechny změny názvů uvedené v tomto dokumentu znamenají, že původní název samozřejmě nadále existuje a funguje, jen je označený jako deprecated. Můžete se setkat s tím, že vám je bude IDE vizuálně označovat jako deprecated.

Composer Frontline

Verze balíčků v souboru composer.json zvednete na aktuální nejsnáze pomocí skriptu composer-frontline.php. Spusťte jej v adresáři, kde je i soubor composer.json, pomocí:

php composer-frontline.php

Názvy rozhraní

V Nette se dlouhodobě postupně odstraňuje prefix I z názvů rozhraní, například Nette\Security\IAuthenticator se mění na Authenticator apod. Ve verzi Nette 3.1 zmizel prefix z názvů těchto rozhraní:

  • Nette\Application\IRouter, Nette\Application\IResponse, Nette\Application\UI\IRenderable, Nette\Application\UI\ISignalReceiver, Nette\Application\UI\IStatePersistent, Nette\Application\UI\ITemplate, Nette\Application\UI\ITemplateFactoryNette\Bridges\ApplicationLatte\ILatteFactory
  • Nette\Caching\IStorage, Nette\Caching\IBulkReader, Nette\Caching\Storages\IJournal
  • Nette\Database\IConventions, Nette\Database\ISupplementalDriver (nyní Nette\Database\Driver)
  • Nette\Mail\IMailer
  • Latte\ILoader, Latte\Runtime\IHtmlString (nyní Latte\Runtime\HtmlStringable), Latte\Runtime\ISnipperDriverLatte\IMacro
  • Nette\Security\IAuthenticator *), Nette\Security\IAuthorizator, Nette\Security\IResource, Nette\Security\IRole, Nette\Security\IUserStorage *)
  • Nette\Utils\IHtmlString (nyní Nette\HtmlStringable), Nette\Localization\ITranslator

*) rozhraní s prefixem je jiné než bez prefixu

Bootstrap

  • třída Nette\Configurator byla přejmenována na Nette\Bootstrap\Configurator, aby pojmenování bylo konzistentní se zbytkem frameworku
  • přidána metoda addStaticParameters() jako alias for addParameters()
  • v parametrech předaných metodou addStaticParameters() nebo addParameters() se již neexpandují %parametry%

Caching

  • přejmenována metoda Nette\Caching\Cache::start()capture()

Database

  • přejmenována třída Nette\Database\Context na Nette\Database\Explorer kvůli konzistenci s pojmenováním Database Explorer
  • rozhraní Nette\Database\IRow a Nette\Database\IRowContainer jsou označeny jako deprecated pro nepotřebnost
  • MySqlDriver driver používá subqueries
  • translator SQL příkazů lépe kontroluje, kde je možné předávat pole

Http

  • 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: zastaralé getBasePath(), getBaseUrl(), getRelativeUrl() (tyto metody jsou součástí UrlScript)
  • Nette\Http\Response::$cookieHttpOnly je zastaralé
  • Nette\Http\FileUpload::getImageSize() vrací čistě dvojici [width, height]

Neon

  • Decoder: pracuje v režimu UTF-8, při neplatném vstupu vyhodí výjimku
  • syntaxe \xAA je zastaralá ve prospěch \uAAAA

Security

  • rozhraní Nette\Security\Authenticator se liší od IAuthenticator signaturou metody autheticate(string $user, string $password)
  • rozhraní Nette\Security\UserStorage se liší od Nette\Security\IUserStorage
  • přejmenována třída Nette\Security\IdentityNette\Security\SimpleIdentity, aby ve vzdálené budoucnosti mohl být interface Nette\Security\IIdentity přejmenován na Identity

Utils

  • Nette\Utils\Arrays::searchKey() přejmenováno na getKeyOffset()
  • Nette\Utils\Callback::closure() je zastaralý ve prospěch Closure::fromCallable()
  • Nette\Utils\Reflection::toString() přidává () za název funkce/metody
  • Nette\Utils\Strings::toAscii() vyvolá notice, pokud není přítomen ext-intl