Typ-System

Das Typ-System ist entscheidend für die Entwicklung robuster Anwendungen. Latte bringt Unterstützung für Typen auch in Templates. Da wir wissen, welcher Daten- oder Objekttyp in jeder Variablen enthalten ist, kann

  • die IDE korrekt Vorschläge machen (siehe Integration)
  • die statische Analyse Fehler aufdecken

Beides steigert die Qualität und den Komfort der Entwicklung erheblich.

Die deklarierten Typen sind informativ und werden von Latte derzeit nicht überprüft.

Wie beginnt man mit der Verwendung von Typen? Erstellen Sie eine Template-Klasse, z. B. CatalogTemplateParameters, die die übergebenen Parameter, ihre Typen und gegebenenfalls auch Standardwerte repräsentiert:

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(),
));

Fügen Sie dann am Anfang des Templates das Tag {templateType} mit dem vollständigen Klassennamen (einschließlich Namespace) ein. Dies definiert, dass im Template die Variablen $langs und $products einschließlich der entsprechenden Typen vorhanden sind. Die Typen lokaler Variablen können Sie mit den Tags {var}, {varType}, {define} angeben.

Von diesem Moment an kann Ihnen die IDE korrekt Vorschläge machen.

Wie können Sie sich Arbeit sparen? Wie schreibt man am einfachsten eine Klasse mit Template-Parametern oder {varType}-Tags? Lassen Sie sie generieren. Dafür gibt es das Tag-Paar {templatePrint} und {varPrint}. Wenn Sie sie in ein Template einfügen, wird anstelle des normalen Renderings ein Vorschlag für den Code der Klasse bzw. eine Liste der {varType}-Tags angezeigt. Den Code können Sie dann einfach mit einem Klick markieren und in Ihr Projekt kopieren.

{templateType}

Die Typen der an das Template übergebenen Parameter deklarieren wir mit einer Klasse:

{templateType MyApp\CatalogTemplateParameters}

{varType}

Wie deklariert man Variablentypen? Dazu dienen die Tags {varType} für vorhandene Variablen oder {var}:

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

{templatePrint}

Sie können sich die Klasse auch mit dem Tag {templatePrint} generieren lassen. Wenn Sie es an den Anfang des Templates setzen, wird anstelle des normalen Renderings ein Vorschlag für die Klasse angezeigt. Den Code können Sie dann einfach mit einem Klick markieren und in Ihr Projekt kopieren.

{varPrint}

Das Tag {varPrint} spart Ihnen Zeit beim Schreiben. Wenn Sie es in ein Template einfügen, wird anstelle des normalen Renderings ein Vorschlag für {varType}-Tags für lokale Variablen angezeigt. Den Code können Sie dann einfach mit einem Klick markieren und in das Template kopieren.

{varPrint} selbst gibt nur lokale Variablen aus, die keine Template-Parameter sind. Wenn Sie alle Variablen ausgeben möchten, verwenden Sie {varPrint all}.

Version: 3.0