System typów
System typów jest kluczowy dla rozwoju solidnych aplikacji. Latte wprowadza wsparcie dla typów również do szablonów. Dzięki temu, że wiemy, jaki typ danych lub obiektowy znajduje się w każdej zmiennej, może
- IDE poprawnie podpowiadać (zobacz integracja)
- analiza statyczna wykrywać błędy
Oba te elementy w znaczący sposób zwiększają jakość i komfort rozwoju.
Zadeklarowane typy są informacyjne i Latte w tej chwili ich nie kontroluje.
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 $langs,
/** @var ProductEntity[] */
public array $products,
public Address $address,
) {}
}
$latte->render('template.latte', new CatalogTemplateParameters(
address: $userAddress,
lang: $settings->getLanguage(),
products: $entityManager->getRepository('Product')->findAll(),
));
A następnie na początku szablonu wstaw tag {templateType} z pełną nazwą klasy (włącznie z namespace). To
definiuje, że w szablonie są zmienne $langs i $products wraz z odpowiednimi typami. Typy zmiennych
lokalnych możesz podać za pomocą tagów {var},
{varType}, {define}.
Od tego momentu IDE może poprawnie podpowiadać.
Jak sobie ułatwić pracę? Jak najłatwiej napisać klasę z parametrami szablonu lub tagi {varType}? Pozwól je
sobie 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}. Kod
wystarczy jednym kliknięciem zaznaczyć i skopiować do projektu.
{templateType}
Typy parametrów przekazywanych do szablonu deklarujemy za pomocą klasy:
{templateType MyApp\CatalogTemplateParameters}
{varType}
Jak zadeklarować typy zmiennych? Do tego służą tagi {varType} dla istniejących zmiennych lub {var}:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
Klasę możesz również wygenerować za pomocą tagu {templatePrint}. Jeśli umieścisz go na początku szablonu,
zamiast zwykłego renderowania wyświetli się propozycja klasy. Kod wystarczy jednym kliknięciem zaznaczyć i skopiować do
projektu.
{varPrint}
Tag {varPrint} oszczędzi ci czas na pisaniu. Jeśli umieścisz go w szablonie, zamiast zwykłego renderowania
wyświetli się propozycja tagów {varType} dla zmiennych lokalnych. Kod wystarczy jednym kliknięciem zaznaczyć
i skopiować do szablonu.
Samo {varPrint} wypisuje tylko zmienne lokalne, które nie są parametrami szablonu. Jeśli chcesz wypisać
wszystkie zmienne, użyj {varPrint all}.