Twig – funkcje

W poprzednim poście o Twigu poznałeś już czym jest Twig, jak wyglądają zmienne, instrukcje warunkowe i pętle. Dzisiaj opowiem Ci coś więcej o funkcjach. Tych wbudowanych w Twig, jak się ich używa oraz jak pisać własne. Twig – funkcje to temat na dziś.

Przydatne natywne funkcje

Twig ma sporo wbudowanych funkcji, które często się przydają. Poniżej wybrałam dwie, które często zdarza mi się stosować stąd uważam, że warto je znać. Trzecia to funkcja block, o której chciałam napisać tutaj ale temat dziedziczenia szablonów jest rozbudowany na tyle, że należy mu się osobny tekst.

W szablonie możesz wykorzystać stałą, którą zdeklarowałeś w jakiejś klasie PHPowej. wystarczy, że wykorzystasz tę funkcję:

{{ constant('Namespace\\Classname::CONSTANT_NAME') }}

Często pomocna w szukaniu problemów, a w zasadzie to szukania przyczyn problemów. Działa jak var_dump() w PHP.

{{ dump(user) }}

Twig – funkcje, które zrobisz sam

Natywne funkcje to bardzo minimalistyczny zestaw. Często potrzebujemy własnych do stworzenia logiki związanej z wyświetlaną zawartością. W takiej sytuacji możemy stworzyć własny extension.

W folderze src/ stwórz katalog Twig/ a w nim klasę np. ImageExtension. Musi ona dziedziczyć z Twig\Extension\AbstractExtension. W niej musi znaleźć się funkcja getFunctions(). Zauważ, że zwraca ona tablicę. Jest tak skonstruowana abyś od razu mógł zdeklarować w niej więcej niż jedną funkcję. Wewnątrz tablicy znajdują się tylko obiekty TwigFunction, które jako parametry przyjmują string, który będzie nazwą funkcji oraz tablicę z informacją gdzie szukać tych funkcji czyli $this i nazwę metody, która ma zostać uruchomiona gdy użyjemy w szablonie zdeklarowanej nazwy funkcji. U mnie są one takie same dla większej przejrzystości kodu.

public function getFunctions()
{
    return [
        new TwigFunction('calculateArea', [$this, 'calculateArea']),
        new TwigFunction('getName', [$this, 'getName']),
    ];
}

public function calculateArea(int $width, int $length)
{
    return $width * $length;
}

public function getName(string $path)
{
    return basename($path);
}

Następnie wystarczy, że w szablonie użyjesz swojej funkcji w ten sposób:

{{ calculateArea(width, length) }}

W temacie funkcji to tyle, następny post w tym temacie będzie o filtrach. Stay tuned!

Poprzedni artykułSymfony Translations
Następny artykułSymfony Data Transformer

Podobne posty

Jestem programistką, która lubi mieć ręce pełne roboty. Do życia potrzebuje komputera z internetem i kubka gorącej kawy. Więcej na stronie o mnie.

Comments

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here