Nette Documentation Preview

syntax
Migrace z Latte 3.0
*******************

.[perex]
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ů |/html-attributes]. 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"`.

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í |/develop#Migrační varování], která vás během vykreslování upozorní, pokud se výstup liší od Latte 3.0.

```php
$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í:

```latte
<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:

```latte
<div title={$var ?? ''}></div>
```

Nebo, pokud striktně vyžadujete staré chování (např. `"1"` pro `true`), explicitně přetypujte hodnotu na string:

```latte
<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:

```php
$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 `\`.

```latte
{* 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 `class` a `style`, automatické vynechání `null` atributů.
- **Nullsafe filtry:** Použijte `{$var?|filter}` pro 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` pro ruční ovládání boolean atributů.

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".

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 class a style, automatické vynechání null atributů.
  • Nullsafe filtry: Použijte {$var?|filter} pro 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 pro ruční ovládání boolean atributů.