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.

  1. Hodnoty null: Dříve se title={$null} vykresloval jako title="". Nyní se atribut zcela vynechá.
  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".

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 class a style, automatické vynechání null atributů.
  • Nullsafe filtry: Použijte {$var?|filter} k přeskočení filtrování null hodnot.
  • n:elseif: Nyní můžete používat n:elseif společně s n:if a n:else.
  • Zjednodušená syntaxe: Pište <div n:if={$cond}> bez uvozovek.
  • Toggle filtr: Použijte |toggle k ručnímu ovládání boolean atributů.
verze: 3.x