System typów
System typów ma kluczowe znaczenie przy tworzeniu solidnych aplikacji. Latte wnosi wsparcie dla typów również do szablonów. Dzięki temu, że wiadomo, jakiego typu danych lub obiektu jest każda zmienna, możliwe staje się:
- poprawne podpowiadanie w IDE (zobacz integracja i pluginy)
- wykrywanie błędów przez analizę statyczną
Jedno i drugie znacząco podnosi jakość i wygodę tworzenia aplikacji.
Deklarowane typy mają charakter informacyjny i Latte na razie ich nie sprawdza.
Jak zacząć używać typów? Utwórz klasę szablonu, np. CatalogTemplateParameters, reprezentującą
przekazywane parametry, ich typy i ewentualnie wartości domyślne:
class CatalogTemplateParameters
{
public function __construct(
public string $lang,
/** @var ProductEntity[] */
public array $products,
public Address $address,
) {}
}
$latte->render('template.latte', new CatalogTemplateParameters(
address: $userAddress,
lang: $settings->getLanguage(),
products: $entityManager->getRepository('Product')->findAll(),
));
Następnie na początku szablonu umieść tag {templateType} z pełną nazwą klasy (wraz z przestrzenią nazw).
To określa, że w szablonie istnieją zmienne $lang, $products i $address, wraz z ich
typami. Typy zmiennych lokalnych możesz podać także za pomocą tagów {var}, {varType} i {define}.
Od tej chwili Twoje IDE potrafi poprawnie podpowiadać.
Jak zaoszczędzić pracę? Jak najłatwiej napisać klasę parametrów szablonu albo tagi {varType}? Kazać je
wygenerować! Do tego służy para tagów {templatePrint} i {varPrint}. Jeśli umieścisz je w
szablonie, zamiast zwykłego renderowania wyświetli się propozycja kodu klasy lub lista tagów {varType}. Wystarczy
potem jednym kliknięciem zaznaczyć kod i skopiować go do projektu.
{templateType}
Typy parametrów przekazywanych do szablonu deklaruje się za pomocą klasy:
{templateType MyApp\CatalogTemplateParameters}
{varType}
Jak zadeklarować typy zmiennych? Dla istniejących zmiennych użyj tagu {varType} albo {var}:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
Klasę możesz też wygenerować za pomocą tagu {templatePrint}. Jeśli umieścisz go na początku szablonu,
zamiast zwykłego renderowania wyświetli się propozycja kodu klasy. Wystarczy potem jednym kliknięciem zaznaczyć kod
i skopiować go do projektu. Opcjonalnie możesz podać nazwę klasy nadrzędnej, np. {templatePrint ParentClass}, a
wygenerowana klasa będzie ją rozszerzać.
{varPrint}
Tag {varPrint} oszczędza Ci czasu na pisaniu. Jeśli umieścisz go w szablonie, zamiast zwykłego renderowania
wyświetli się propozycja tagów {varType} dla zmiennych lokalnych. Wystarczy potem jednym kliknięciem zaznaczyć
kod i skopiować go do szablonu.
Sam {varPrint} wypisuje tylko zmienne lokalne, które nie są parametrami szablonu. Jeśli chcesz wypisać
wszystkie zmienne, użyj {varPrint all}.