Novinky v Latte 2.6: volitelné řetězení a vlastní funkce

před 28 dny od David Grudl     edit

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}
// zamená cca isset($items[2]) ? $items[2]->count : null

{$user->getIdentity()?->name}
// zamená 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 array_rand($args);
});

nebo v presenterech:

$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 nové verzi Latte pluginu pro PhpStorm (zatím v beta verzi ke stažení tady).

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 (RSS)

  1. Tak tohle je bomba :)

    před 17 dny

Chcete-li odeslat komentář, přihlaste se