Typsystem

Das Typsystem ist für die Entwicklung robuster Anwendungen entscheidend. Latte bringt die Unterstützung von Typen auch in Templates. Dadurch, dass der Daten- oder Objekttyp jeder Variablen bekannt ist, ermöglicht es:

Beides erhöht die Qualität und den Komfort der Entwicklung erheblich.

Die deklarierten Typen sind informativ, Latte prüft sie derzeit nicht.

Wie fängt man mit Typen an? Legen Sie eine Template-Klasse an, z. B. CatalogTemplateParameters, die die übergebenen Parameter, ihre Typen und gegebenenfalls ihre Standardwerte abbildet:

class CatalogTemplateParameters
{
	public function __construct(
		public string $lang,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));

Fügen Sie dann am Anfang des Templates den Tag {templateType} mit dem vollständigen Klassennamen (samt Namespace) ein. Damit ist festgelegt, dass es im Template die Variablen $lang, $products und $address gibt, einschließlich ihrer jeweiligen Typen. Die Typen lokaler Variablen können Sie mit den Tags {var}, {varType} und {define} angeben.

Von diesem Moment an kann Ihre IDE korrekt vervollständigen.

Wie spart man Arbeit? Wie schreibt man am einfachsten eine Klasse mit Template-Parametern oder die Tags {varType}? Lassen Sie sie generieren! Dafür ist das Tag-Paar {templatePrint} und {varPrint} da. Platzieren Sie eines davon in einem Template, wird statt des normalen Renderings ein Vorschlag für den Klassencode oder eine Liste der Tags {varType} angezeigt. Dann markieren Sie den Code einfach mit einem Klick und kopieren ihn in Ihr Projekt.

{templateType}

Die Typen der an das Template übergebenen Parameter werden mit einer Klasse deklariert:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Wie deklariert man die Typen von Variablen? Verwenden Sie für bestehende Variablen den Tag {varType} oder {var}:

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

{templatePrint}

Sie können sich die Klasse auch mit dem Tag {templatePrint} generieren lassen. Platzieren Sie ihn am Anfang des Templates, wird statt des normalen Renderings ein Vorschlag für den Klassencode angezeigt. Dann markieren Sie den Code einfach mit einem Klick und kopieren ihn in Ihr Projekt. Optional können Sie den Namen einer Elternklasse angeben, z. B. {templatePrint ParentClass}, und die generierte Klasse wird von ihr erben.

{varPrint}

Der Tag {varPrint} erspart Ihnen Schreibarbeit. Platzieren Sie ihn in einem Template, wird statt des normalen Renderings ein Vorschlag für die Tags {varType} der lokalen Variablen angezeigt. Dann markieren Sie den Code einfach mit einem Klick und kopieren ihn in Ihr Template.

{varPrint} selbst listet nur lokale Variablen auf, die keine Template-Parameter sind. Wollen Sie alle Variablen auflisten, verwenden Sie {varPrint all}.

Version: 3.x