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

wersja: 3.0