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".
Abyste místa, kde se výstup ve vaší aplikaci změnil, snadno našli, nabízí Latte 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->setFeature(Latte\Feature::MigrationWarnings);
Pokud jsou povolena, hledejte v logu aplikace nebo Tracy baru varování 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 filtrem |accept a
potlačte tak varování:
<div title={$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 řetězec:
<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->setFeature(Latte\Feature::StrictTypes, 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í uvozeny 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í řetězců bez uvozovek.
Odstraněné a zavržené funkce
Rezervované proměnné: Proměnné začínající na $__ (dvě podtržítka) a proměnná
$this jsou vyhrazeny pro vnitřní použití Latte. Ve výchozím nastavení je stále lze použít, ale vyvolají
varování o zavržení; teprve se zapnutým striktním parsováním způsobí chybu kompilace. Vnitřní proměnné
$ʟ_… a $GLOBALS jsou zakázané vždy.
Undefined-safe operátor: Operátor ??->, specifická vlastnost Latte vzniklá 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}k 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
|togglek ručnímu ovládání boolean atributů.