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