System typu

System typów jest kluczowy dla rozwoju solidnych aplikacji. Latte wprowadza obsługę typów również do szablonów. Wiedząc, jaki typ danych lub obiektów znajduje się w każdej zmiennej, może

  • IDE do poprawnego szeptania (patrz integracja)
  • analiza statyczna w celu wykrycia błędów

Oba zasadniczo poprawiają jakość i wygodę rozwoju.

Deklarowane typy są informacyjne i Latte nie kontroluje ich w tym czasie.

Jak zacząć używać typów? Utwórz klasę szablonową, 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(),
));

Następnie na początku szablonu umieść tag {templateType} z pełną nazwą klasy (wraz z przestrzenią nazw). To definiuje, że szablon zawiera zmienne $langs i $products wraz z ich odpowiednimi typami. Możesz określić typy zmiennych lokalnych używając znaczników {var}, {varType}, {define}.

Od tego momentu IDE może Ci prawidłowo szeptać.

Jak zaoszczędzić sobie pracy? Jak najprościej napisać klasę z parametrami szablonu lub tagu {varType}? Niech je wygenerują. W tym celu istnieje para znaczników {templatePrint} i {varPrint}. Jeśli umieścisz je w szablonie, zamiast zwykłego renderingu, zobaczysz projekt kodu klasy lub listę znaczników {varType}. Następnie wystarczy wybrać kod i skopiować go do projektu jednym kliknięciem.

{templateType}

Typy parametrów przekazywanych do szablonu są deklarowane za pomocą klasy:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Jak deklarować typy zmiennych? Aby to zrobić, użyj znaczników {varType} dla istniejących zmiennych, lub {var}:

{varType Nette\Security\User $user}
{varType string $lang}

{templatePrint}

Możesz również zlecić wygenerowanie klasy za pomocą znacznika {templatePrint} Jeśli umieścisz go na początku szablonu, zobaczysz projekt klasy zamiast normalnego renderingu. Kod może być następnie wybrany i skopiowany do projektu jednym kliknięciem.

{varPrint}

Znacznik {varPrint} oszczędza czas przy wpisywaniu. Jeśli umieścisz go w szablonie, zobaczysz sugestię tagu {varType} dla zmiennych lokalnych zamiast normalnego renderowania. Możesz wtedy po prostu wybrać kod i skopiować go do szablonu jednym kliknięciem.

Sam {varPrint} wymienia tylko zmienne lokalne, które nie są parametrami szablonu. Jeśli chcesz wypisać wszystkie zmienne, użyj {varPrint all}.

wersja: 3.0