Migrace z Latte 3.0
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. Tento průvodce shrnuje BC breaky a jak je řešit.
Latte 3.1 vyžaduje PHP 8.2 nebo novější.
Chytré atributy a migrace
Nejvýznamnější změnou v Latte 3.1 je nové chování chytrých
atributů. To ovlivňuje, jak se vykreslují hodnoty null a logické hodnoty v data- atributech.
- Hodnoty
null: Dříve setitle={$null}vykresloval jakotitle="". Nyní se atribut zcela vynechá. data-atributy: Dříve sedata-foo={=true}/data-foo={=false}vykreslovaly jakodata-foo="1"/data-foo="". Nyní se vykreslují jakodata-foo="true"/data-foo="false".
Abychom vám pomohli identifikovat místa, kde se výstup ve vaší aplikaci změnil, Latte poskytuje migrační nástroj.
Migrační varování
Můžete zapnout migrační varování, která vás během vykreslování upozorní, pokud se výstup liší od Latte 3.0.
$latte = new Latte\Engine;
$latte->setMigrationWarnings();
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ě.
Jak varování vyřešit:
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í:
<div class="{$var|accept}"></div>
Pokud chcete atribut zachovat jako prázdný (např. title="") místo jeho vynechání, použijte null coalescing
operátor:
<div title={$var ?? ''}></div>
Nebo, pokud striktně vyžadujete staré chování (např. "1" pro true), explicitně přetypujte
hodnotu na string:
<div data-foo={(string) $bool}></div>
Poté, co vyřešíte všechna varování:
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.
Strict Types
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í.
Pokud typy nemůžete opravit okamžitě, můžete toto chování vypnout:
$latte->setStrictTypes(false);
Globální konstanty
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 \.
{* Starý způsob (vyhodí varování, v budoucnu bude interpretováno jako string 'PHP_VERSION') *}
{if PHP_VERSION > ...}
{* Nový způsob (správně interpretováno jako konstanta) *}
{if \PHP_VERSION > ...}
Tato změna předchází nejednoznačnostem a umožňuje volnější používání neuvodzovkovaných řetězců.
Odstraněné funkce
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.
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 ?->.
Filter Loader Metoda Engine::addFilterLoader() byla označena jako zastaralá a odstraněna. Šlo
o nekonzistentní koncept, který se jinde v Latte nevyskytoval.
Date Format Statická vlastnost Latte\Runtime\Filters::$dateFormat byla odstraněna, aby se předešlo
globálnímu stavu.
Nové funkce
Během migrace si můžete začít užívat nové funkce:
- Chytré HTML atributy: Předávání polí do
classastyle, automatické vynechánínullatributů. - Nullsafe filtry: Použijte
{$var?|filter}pro přeskočení filtrování null hodnot. n:elseif: Nyní můžete používatn:elseifspolečně sn:ifan:else.- Zjednodušená syntaxe: Pište
<div n:if={$cond}>bez uvozovek. - Toggle filtr: Použijte
|togglepro ruční ovládání boolean atributů.