Latte 3 a extension pro každý webový projekt
- David Grudl
- Nette Core | 8228
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