Nette Documentation Preview

syntax
Upgrade
*******


Upgrade na verzi 4.0
====================

Minimální požadovaná verze PHP je 8.4. Značka `{cache}` vyžaduje Latte 3.1.

.[tip]
Část práce za vás udělá [DressCode |tools:coding-standard#Novější PHP a Nette] s balíčkem `dresscode/upgrade-nette`: přepíše přejmenované třídy a konstanty a ohlásí, co přepsat nedokáže. Viz [Upgrade Nette |https://dresscode.run/cs/upgrading-nette].

Rozhraní `Nette\Caching\IStorage`, `Nette\Caching\IBulkReader` a `Nette\Caching\Storages\IJournal` byla odstraněna; použijte `Nette\Caching\Storage`, `Nette\Caching\BulkReader` a `Nette\Caching\Storages\Journal`. Odstraněny byly i aliasy služeb `cacheStorage` a `nette.cacheJournal`; použijte služby `cache.storage` a `cache.journal`, případně autowiring.

Konstanty psané velkými písmeny, třeba `Cache::EXPIRE` nebo `Cache::TAGS`, a metoda `Cache::start()` nyní vyvolávají `E_USER_DEPRECATED`. Použijte `Cache::Expire`, `Cache::Tags` a `capture()`. Předávat closure jako data do `Cache::save()` je zastaralé, předejte ji jako generátor do `load()`.

Závislosti lze zapsat novým objektem `Nette\Caching\Dependencies`, viz [Expirace a invalidace |expiration]. Pole s klíči `Cache::*` dál funguje, ale neznámý klíč nebo hodnota špatného typu nyní vyhodí výjimku. Typicky jde o prioritu zapsanou jako řetězec, třeba `'50'`, která musí být celé číslo.

Metoda `Cache::clean()` přijímá podmínky jako pojmenované argumenty, třeba `$cache->clean(tags: ['article/10'])`; pole se kontroluje stejně jako závislosti. Několik věcí se chová jinak:

- `clean()` bez jakékoliv podmínky vyhodí výjimku. Vyexpirované položky smažete voláním `clean([])` na úložišti.
- `all` u cache s jmenným prostorem smaže jen tento prostor a prostory z něj odvozené; dříve smazal celé úložiště. Pokud chcete smazat vše, zavolejte ho na cache bez jmenného prostoru, nebo zavolejte `$storage->clean([Cache::All => true])`.
- Mazání podle `Cache::Namespaces` smaže i prostory odvozené od uvedených pomocí `derive()`.

Úložiště vyhodí `Nette\NotSupportedException` pro závislost nebo podmínku, kterou neumí, místo aby ji potichu ignorovalo. `SQLiteStorage` nepodporuje priority ani závislosti na souborech, konstantách, callbackech a jiných položkách; `MemcachedStorage` nepodporuje mazání podle jmenných prostorů. Viz přehled [úložišť |storages#Výběr úložiště].

`PsrCacheAdapter` nyní kontroluje klíče tak, jak vyžaduje PSR-16, takže odmítne klíče obsahující některý ze znaků `{}()/\@:`, třeba `user:1`.

Pokud jste napsali vlastní úložiště, odstraňte metodu `lock()`, která už neexistuje, a deklarujte návratový typ `mixed` metody `read()`. Úložiště, které má chybějící položku nechat vygenerovat jen jednomu procesu, implementuje rozhraní `Nette\Caching\LockingReader`. Potomek `Cache`, který přepisuje `clean()`, musí deklarovat její nové parametry.


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

- metoda `Nette\Caching\Cache::start()` byla přejmenována na `capture()`


Upgrade na verzi 2.4
====================

- třída `Nette\Caching\Storages\FileJournal` již není k dispozici


Upgrade na verzi 2.3
====================

- prastará a zastaralá ArrayAccess syntaxe `$val = $cache[$key]` nebo `$cache[$key] = $val` vyvolá `E_USER_DEPRECATED`; použijte místo ní `$cache->load($key)` a `$cache->save($key, $val)`

{{maintitle: Upgrade Nette Caching: změny v jednotlivých verzích}}
{{description: Co se změnilo v Nette Caching 4.0, 3.1 a starších verzích 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.4. Značka {cache} vyžaduje Latte 3.1.

Část práce za vás udělá DressCode s balíčkem dresscode/upgrade-nette: přepíše přejmenované třídy a konstanty a ohlásí, co přepsat nedokáže. Viz Upgrade Nette.

Rozhraní Nette\Caching\IStorage, Nette\Caching\IBulkReader a Nette\Caching\Storages\IJournal byla odstraněna; použijte Nette\Caching\Storage, Nette\Caching\BulkReader a Nette\Caching\Storages\Journal. Odstraněny byly i aliasy služeb cacheStorage a nette.cacheJournal; použijte služby cache.storage a cache.journal, případně autowiring.

Konstanty psané velkými písmeny, třeba Cache::EXPIRE nebo Cache::TAGS, a metoda Cache::start() nyní vyvolávají E_USER_DEPRECATED. Použijte Cache::Expire, Cache::Tags a capture(). Předávat closure jako data do Cache::save() je zastaralé, předejte ji jako generátor do load().

Závislosti lze zapsat novým objektem Nette\Caching\Dependencies, viz Expirace a invalidace. Pole s klíči Cache::* dál funguje, ale neznámý klíč nebo hodnota špatného typu nyní vyhodí výjimku. Typicky jde o prioritu zapsanou jako řetězec, třeba '50', která musí být celé číslo.

Metoda Cache::clean() přijímá podmínky jako pojmenované argumenty, třeba $cache->clean(tags: ['article/10']); pole se kontroluje stejně jako závislosti. Několik věcí se chová jinak:

Úložiště vyhodí Nette\NotSupportedException pro závislost nebo podmínku, kterou neumí, místo aby ji potichu ignorovalo. SQLiteStorage nepodporuje priority ani závislosti na souborech, konstantách, callbackech a jiných položkách; MemcachedStorage nepodporuje mazání podle jmenných prostorů. Viz přehled úložišť.

PsrCacheAdapter nyní kontroluje klíče tak, jak vyžaduje PSR-16, takže odmítne klíče obsahující některý ze znaků {}()/\@:, třeba user:1.

Pokud jste napsali vlastní úložiště, odstraňte metodu lock(), která už neexistuje, a deklarujte návratový typ mixed metody read(). Úložiště, které má chybějící položku nechat vygenerovat jen jednomu procesu, implementuje rozhraní Nette\Caching\LockingReader. Potomek Cache, který přepisuje clean(), musí deklarovat její nové parametry.

Upgrade na verzi 3.1

Upgrade na verzi 2.4

Upgrade na verzi 2.3