Upgrade
*******
Upgrade na verzi 4.0
====================
Minimální požadovaná verze PHP je 8.0.
Třída `Nette\Utils\Reflection` poskytovala metody pro práci s typy `getParameterType()`, `getPropertyType()` a `getReturnType()`. Metody vznikly v době, kdy PHP nemělo union, intersection nebo nejnovější disjunctive normal form typy, se kterými už nefungují, a nahradila je [třída Type |type]. Od verze 4.0 jsou tyto metody odstraněné.
Zrušená je proměnná `Nette\Utils\Html::$xhtml`.
Příznaky (flagy) v některých metodách nahradily pojmenované argumenty. Původní zápis stále funguje, ale není preferovaný: `Json::PRETTY` → `pretty:`, `Json::ESCAPE_UNICODE` → `asciiSafe:`, `Json::FORCE_ARRAY` → `forceArrays:`, `PREG_GREP_INVERT` v `Arrays::grep()` → `invert:`, `Image::SHRINK_ONLY` v `Image::resize()` → `shrinkOnly:` a příznaky `PREG_*` v `Strings::split()`, `match()` a `matchAll()`.
Metoda `Nette\Utils\Reflection::getParameterDefaultValue()` je zastaralá, protože nativní `ReflectionParameter::getDefaultValue()` už funguje správně.
Pokud používáte RobotLoader, zaktualizujte jej také na verzi 4.
Finder
------
Finder se přestěhoval do balíčku `nette/utils`, původní odstraňte:
```shell
composer remove nette/finder
```
Na Linuxu se nově chová v režimu case-sensitive.
V předchozí verzi platilo, že metody `exclude()` a `filter()` fungovaly jinak, když byly zavolány **před** `from()`, resp. `in()`, a **po** ní. Tohle už neplatí, `exclude()` a `filter()` fungují vždy stejně. Dřívější `filter()` volaný *až po* nahradila nová metoda `descentFilter()`.
Finder již neimplementuje rozhraní `Countable`.
Řetězec začínající lomítkem ve `Finder::findFiles('/f*')` se nově považuje za absolutní cestu, je potřeba ho nahradit např. za `Finder::findFiles('./f*')`.
Pokud adresář, ve kterém hledáte, neexistuje, vyhodí se `Nette\InvalidStateException` (místo `UnexpectedValueException`).
Co všechno přepsaný Finder umí, popisuje článek [Finder 4.0: 10 let zkušeností pod kapotou |https://blog.nette.org/cs/finder-4-0-10-let-zkusenosti-pod-kapotou].
Upgrade na verzi 3.1
====================
- `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
Upgrade na verzi 3.0
====================
Rozhraní `Nette\Localization\ITranslator` bylo změněno.
`Nette\Object` je zastaralý od Nette 2.4 a odstraněný v Nette 3.0. Stále však existuje pod novým názvem `Nette\LegacyObject` (jméno `object` nelze používat od PHP 7.1) v balíčku [nette/deprecated |https://github.com/nette/deprecated].
Upgrade na verzi 2.4
====================
Třídy frameworku nyní místo dědění od `Nette\Object` používají trait `Nette\SmartObject`, který se liší v několika věcech:
- podporuje "emulované properties" jen pokud je na třídě zapsaná anotace `@property typ $nazev`
- nepodporuje "extension methods"
- nepodporuje "getReflection"
- nepodporuje získávání metod jako `$this->formSubmitted`; nahraďte za klasický PHP callback `[$this, 'formSubmitted']`
Metoda `Nette\Utils\Html::add()` byla nahrazena metodami `addHtml()` a `addText()`.
Upgrade na verzi 2.3
====================
- `Image::from()` vyhodí `ImageException`, když nedokáže dekódovat soubor
- `Image::getFormatFromString()` je zastaralá
- `Strings::chr()` a `normalize()` nyní fungují pouze s kódováním UTF-8
- `Strings::chr()` vyhodí `Nette\InvalidArgumentException`, pokud kód znaku není v platném rozsahu
{{maintitle: Upgrade Nette Utils: změny v jednotlivých verzích}}
{{description: Co se změnilo v Nette Utils 4.0, 3.1, 3.0, 2.4 a 2.3 a jak upravit kód při přechodu na novější verzi.}}
Upgrade
Upgrade na verzi 4.0
Minimální požadovaná verze PHP je 8.0.
Třída Nette\Utils\Reflection poskytovala metody pro práci s typy getParameterType(),
getPropertyType() a getReturnType(). Metody vznikly v době, kdy PHP nemělo union, intersection nebo
nejnovější disjunctive normal form typy, se kterými už nefungují, a nahradila je třída Type. Od verze 4.0 jsou tyto metody odstraněné.
Zrušená je proměnná Nette\Utils\Html::$xhtml.
Příznaky (flagy) v některých metodách nahradily pojmenované argumenty. Původní zápis stále funguje, ale není
preferovaný: Json::PRETTY → pretty:, Json::ESCAPE_UNICODE → asciiSafe:,
Json::FORCE_ARRAY → forceArrays:, PREG_GREP_INVERT v Arrays::grep() →
invert:, Image::SHRINK_ONLY v Image::resize() → shrinkOnly: a příznaky
PREG_* v Strings::split(), match() a matchAll().
Metoda Nette\Utils\Reflection::getParameterDefaultValue() je zastaralá, protože nativní
ReflectionParameter::getDefaultValue() už funguje správně.
Pokud používáte RobotLoader, zaktualizujte jej také na verzi 4.
Finder
Finder se přestěhoval do balíčku nette/utils, původní odstraňte:
composer remove nette/finder
Na Linuxu se nově chová v režimu case-sensitive.
V předchozí verzi platilo, že metody exclude() a filter() fungovaly jinak, když byly zavolány
před from(), resp. in(), a po ní. Tohle už neplatí, exclude() a
filter() fungují vždy stejně. Dřívější filter() volaný až po nahradila nová metoda
descentFilter().
Finder již neimplementuje rozhraní Countable.
Řetězec začínající lomítkem ve Finder::findFiles('/f*') se nově považuje za absolutní cestu, je potřeba
ho nahradit např. za Finder::findFiles('./f*').
Pokud adresář, ve kterém hledáte, neexistuje, vyhodí se Nette\InvalidStateException (místo
UnexpectedValueException).
Co všechno přepsaný Finder umí, popisuje článek Finder 4.0: 10 let zkušeností pod kapotou.
Upgrade na verzi 3.1
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
Upgrade na verzi 3.0
Rozhraní Nette\Localization\ITranslator bylo změněno.
Nette\Object je zastaralý od Nette 2.4 a odstraněný v Nette 3.0. Stále však existuje pod novým názvem
Nette\LegacyObject (jméno object nelze používat od PHP 7.1) v balíčku nette/deprecated.
Upgrade na verzi 2.4
Třídy frameworku nyní místo dědění od Nette\Object používají trait Nette\SmartObject,
který se liší v několika věcech:
- podporuje „emulované properties“ jen pokud je na třídě zapsaná anotace
@property typ $nazev
- nepodporuje „extension methods“
- nepodporuje „getReflection“
- nepodporuje získávání metod jako
$this->formSubmitted; nahraďte za klasický PHP
callback [$this, 'formSubmitted']
Metoda Nette\Utils\Html::add() byla nahrazena metodami addHtml() a addText().
Upgrade na verzi 2.3
Image::from() vyhodí ImageException, když nedokáže dekódovat soubor
Image::getFormatFromString() je zastaralá
Strings::chr() a normalize() nyní fungují pouze s kódováním UTF-8
Strings::chr() vyhodí Nette\InvalidArgumentException, pokud kód znaku není v platném
rozsahu