Latte 3 a extension pro každý webový projekt

David Grudl
Nette Core | 8228
+
+14
-

S Latte 3 jsem přešel na design, kdy si vytvářím latte extension specifické pro každý webový projekt.

Takže žádné $this->template->addFilter() apod. v presenterech, místo toho mám jednu extension, která přidá všechny filtry, značky, funkce atd.

Příklad takové projektové LatteExtension:

final class LatteExtension extends Latte\Extension
{
	public function __construct(
		private Filters $filters,
		private BlogFacade $blogFacade,
		private User $user,
		private Translator $translator,
		// atd...
	) {
	}

	public function getFilters(): array
	{
		return [
			'timeAgoInWords' => $this->filters->timeAgoInWords(...),
			'money' => $this->filters->money(...),
			// ...
		];
	}

	public function getFunctions(): array
	{
		return [
			'canEditArticle' => fn($article) => $this->blogFacade->canEditArticle($article, $this->user),
			// ...
		];
	}

	// ...
}

Kód filtrů nechci držet přímo v té extension, mám je hozené v samostatné třídě Filters, kterou si předávám.

Samotnou extension pak registruju pomocí konfiguračního souboru:

latte:
	extensions:
		- App\Templating\LatteExtension

Pomocí konfigu přidávám i extension pro překlady, což nahrazuje $this->template->setTranslator(...) v presenterech:

latte:
	extensions:
		- App\Templating\LatteExtension
		- Latte\Essential\TranslatorExtension
Milo
Nette Core | 1283
+
+3
-

Těším se na refactoring jak malej kluk :)