|
| 1 | +Migrace z Latte 3.0 |
| 2 | +******************* |
| 3 | + |
| 4 | +Latte 3.1 přináší několik vylepšení a změn, díky kterým je psaní šablon bezpečnější a pohodlnější. Většina změn je zpětně kompatibilní, ale některé vyžadují pozornost při přechodu. |
| 5 | + |
| 6 | +Tento průvodce shrnuje BC breaky a jak je řešit. |
| 7 | + |
| 8 | +Latte 3.1 vyžaduje **PHP 8.2** nebo novější. |
| 9 | + |
| 10 | + |
| 11 | +Chytré atributy a migrace |
| 12 | +========================= |
| 13 | + |
| 14 | +Nejvýznamnější změnou v Latte 3.1 je nové chování [chytrých atributů |/html-attributes]. To ovlivňuje, jak se vykreslují hodnoty `null` a logické hodnoty v `data-` atributech. |
| 15 | + |
| 16 | +1. **Hodnoty `null`:** Dříve se `title={$null}` vykresloval jako `title=""`. Nyní se atribut zcela vynechá. |
| 17 | +2. **`data-` atributy:** Dříve se `data-foo={=true}` / `data-foo={=false}` vykreslovaly jako `data-foo="1"` / `data-foo=""`. Nyní se vykreslují jako `data-foo="true"` / `data-foo="false"`. |
| 18 | + |
| 19 | +Abychom vám pomohli identifikovat místa, kde se výstup ve vaší aplikaci změnil, Latte poskytuje migrační nástroj. |
| 20 | + |
| 21 | + |
| 22 | +Migrační varování |
| 23 | +----------------- |
| 24 | + |
| 25 | +Můžete zapnout [migrační varování |/develop#Migrační varování], která vás během vykreslování upozorní, pokud se výstup liší od Latte 3.0. |
| 26 | + |
| 27 | +```php |
| 28 | +$latte = new Latte\Engine; |
| 29 | +$latte->setMigrationWarnings(); |
| 30 | +``` |
| 31 | + |
| 32 | +Pokud jsou povolena, sledujte logy aplikace nebo Tracy bar pro `E_USER_WARNING`. Každé varování bude ukazovat na konkrétní řádek a sloupec v šabloně. |
| 33 | + |
| 34 | +**Jak varování vyřešit:** |
| 35 | + |
| 36 | +Pokud je nové chování správné (např. chcete, aby prázdný atribut zmizel), potvrďte jej použitím filtru `|accept` pro potlačení varování: |
| 37 | + |
| 38 | +```latte |
| 39 | +<div class="{$var|accept}"></div> |
| 40 | +``` |
| 41 | + |
| 42 | +Pokud chcete atribut zachovat jako prázdný (např. `title=""`) místo jeho vynechání, použijte null coalescing operátor: |
| 43 | + |
| 44 | +```latte |
| 45 | +<div title={$var ?? ''}></div> |
| 46 | +``` |
| 47 | + |
| 48 | +Nebo, pokud striktně vyžadujete staré chování (např. `"1"` pro `true`), explicitně přetypujte hodnotu na string: |
| 49 | + |
| 50 | +```latte |
| 51 | +<div data-foo={(string) $bool}></div> |
| 52 | +``` |
| 53 | + |
| 54 | +**Poté, co vyřešíte všechna varování:** |
| 55 | + |
| 56 | +Jakmile vyřešíte všechna varování, vypněte migrační varování a **odstraňte všechny** filtry `|accept` ze svých šablon, protože již nejsou potřeba. |
| 57 | + |
| 58 | + |
| 59 | +Strict Types |
| 60 | +============ |
| 61 | + |
| 62 | +Latte 3.1 zapíná `declare(strict_types=1)` ve výchozím nastavení pro všechny kompilované šablony. To zlepšuje typovou bezpečnost, ale může způsobit typové chyby v PHP výrazech uvnitř šablon, pokud jste spoléhali na volné typování. |
| 63 | + |
| 64 | +Pokud typy nemůžete opravit okamžitě, můžete toto chování vypnout: |
| 65 | + |
| 66 | +```php |
| 67 | +$latte->setStrictTypes(false); |
| 68 | +``` |
| 69 | + |
| 70 | + |
| 71 | +Globální konstanty |
| 72 | +================== |
| 73 | + |
| 74 | +Parser šablon byl vylepšen, aby lépe rozlišoval mezi jednoduchými řetězci a konstantami. V důsledku toho musí být globální konstanty nyní prefixovány zpětným lomítkem `\`. |
| 75 | + |
| 76 | +```latte |
| 77 | +{* Starý způsob (nyní interpretováno jako řetězec 'PHP_VERSION') *} |
| 78 | +{if PHP_VERSION > ...} |
| 79 | + |
| 80 | +{* Nový způsob (správně interpretováno jako konstanta) *} |
| 81 | +{if \PHP_VERSION > ...} |
| 82 | +``` |
| 83 | + |
| 84 | +Tato změna předchází nejednoznačnostem a umožňuje volnější používání neuvodzovkovaných řetězců. |
| 85 | + |
| 86 | + |
| 87 | +Odstraněné funkce |
| 88 | +================= |
| 89 | + |
| 90 | +**Rezervované proměnné:** Proměnné začínající na `$__` (dvou podtržítko) a proměnná `$this` jsou nyní vyhrazeny pro vnitřní použití Latte. Nemůžete je používat v šablonách. |
| 91 | + |
| 92 | +**Undefined-safe operátor:** Operátor `??->`, což byla specifická funkce Latte vytvořená před PHP 8, byl odstraněn. Jde o historický relikt. Používejte prosím standardní PHP nullsafe operátor `?->`. |
| 93 | + |
| 94 | +**Filter Loader** |
| 95 | +Metoda `Engine::addFilterLoader()` byla označena jako zastaralá a odstraněna. Šlo o nekonzistentní koncept, který se jinde v Latte nevyskytoval. |
| 96 | + |
| 97 | +**Date Format** |
| 98 | +Statická vlastnost `Latte\Runtime\Filters::$dateFormat` byla odstraněna, aby se předešlo globálnímu stavu. |
| 99 | + |
| 100 | + |
| 101 | +Nové funkce |
| 102 | +=========== |
| 103 | + |
| 104 | +Během migrace si můžete začít užívat nové funkce: |
| 105 | + |
| 106 | +- **Chytré HTML atributy:** Předávání polí do `class` a `style`, automatické vynechání `null` atributů. |
| 107 | +- **Nullsafe filtry:** Použijte `{$var?|filter}` pro přeskočení filtrování null hodnot. |
| 108 | +- **`n:elseif`:** Nyní můžete používat `n:elseif` společně s `n:if` a `n:else`. |
| 109 | +- **Zjednodušená syntaxe:** Pište `<div n:if={$cond}>` bez uvozovek. |
| 110 | +- **Toggle filtr:** Použijte `|toggle` pro ruční ovládání boolean atributů. |
0 commit comments