Novinky v Latte 2.6: volitelné řetězení a vlastní funkce
Nedávno vyšlo Latte 2.6, se kterým přicházejí dvě šikovné novinky, které zjednoduší a zpřehlední vaše šablony. Pojďme se na ně podívat.
Volitelné řetězení
Volitelné řetězení (optional chaining) umožňuje psát kód, kde Latte
okamžitě zastaví vyhodnocování výrazů, pokud narazí na null. A to díky
novému operátoru ?
umožňujícímu volitelný přístup
k proměnným nebo prvkům pole. Když píšeme výraz jako
{$order?->id}
říkáme tím, že když je definován $order
, bude vypsán
$order->id
, ale když je $order
null, zastaví se
vyhodnocování a prostě se vrátí null.
Uvidíte, že pomocí ?
nahradíte spoustu kódu, který by
jinak opakovaně kontroloval null:
{$user?->address?->street}
// znamená cca isset($user) && isset($user->address) ? $user->address->street : null
{$items[2]?->count}
// znamená cca isset($items[2]) ? $items[2]->count : null
{$user->getIdentity()?->name}
// znamená cca $user->getIdentity() !== null ? $user->getIdentity()->name : null
V příkladech píši cca
, protože ve skutečnosti se výraz
vyhodnocuje důmyslněji a žádný krok se neopakuje. Například
$user->getIdentity()
se zavolá jen jednou, tedy nemůže nastat
problém způsobený tím, že by metoda poprvé vrátila objekt a
podruhé null.
Výrazy s volitelným řetězením lze používat kdekoliv, například v podmínkách:
{if $blogPost?->count('*')}
// znamená if (isset($blogPost) && $blogPost->count('*'))
...
{/if}
Vlastní funkce
V Latte můžete používat všechny globální funkce PHP, ale nyní si také definovat své vlastní:
$latte = new Latte\Engine;
$latte->addFunction('random', function (...$args) {
return $args[array_rand($args)];
});
nebo v presenterech (vyžaduje nette/application v3.0.3):
$this->template->addFunction('random', function (...$args) {
return array_rand($args);
});
Použití je pak stejné, jako když voláte PHP funkci:
{random(jablko, pomeranč, citron)} // vypíše například: jablko
Podporu vlastních funkcí najdete i v Latte pluginu pro PhpStorm (lze nastavit i přes XML konfiguraci):
Jak obrázek naznačuje, společně s novou verzí
nette/application
můžete v šablonách používat novou dvojici
funkcí isLinkCurrent()
a isModuleCurrent()
.
<a n:href="Photo:" n:class="isLinkCurrent('Photo:') ? actual">Fotogalerie</a>
Komentáře
Tak tohle je bomba :)
Vypadá to skvěle.
U příkladů s vlastní funkcí by myslím mělo být
#2 uestla Teď budu dělat chytrýho, protože sem to dneska četl. To je syntaxe z PHP8, viz https://blog.nette.org/…e-noveho-1-4.
#2 uestla díky, opraveno
Chcete-li odeslat komentář, přihlaste se