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}
.