Finch sjabloonevenementen
Finch injecteert een globaal $e-object (sjabloonevenement) in elke Jinja-render. Dit object biedt hulpmethoden voor assets, routes, cookies, taal en diverse hulpprogramma's.
Globale variabelen
| Variabele | Beschrijving |
|---|---|
$language |
Huidige taalcode — bijv. 'en', 'nl' |
$isDebug |
Of de app in debugmodus draait |
$domain |
Publiek domein uit FinchConfigs |
Asset-hulpmiddelen
{# Een CSS-bestand laden #}
{{ $e.css('/public/css/app.css') }}
{# Een JS-bestand laden #}
{{ $e.js('/public/js/app.js') }}
Route- en URL-hulpmiddelen
{# URL genereren op basis van routesleutel #}
<a href="{{ $e.routeUrl('root') }}">Startpagina</a>
<a href="{{ $e.routeUrl('users.show', {'id': user.id}) }}">Profiel</a>
{# Huidige URL #}
{{ $e.currentUrl() }}
Cookie-hulpmiddelen
{# Een cookie lezen #}
{% set theme = $e.getCookie('theme', 'light') %}
Taal-hulpmiddelen
{# Links voor taalwisseling genereren #}
{{ $e.langUrl('en') }} {# URL voor Engels #}
{{ $e.langUrl('nl') }} {# URL voor Nederlands #}
Vertalen met $t
Gebruik $t om gelokaliseerde strings op te halen uit taalbestanden:
{{ $t('welcome') }}
{{ $t('greeting', {'name': user.name}) }}
Zie Lokalisatie voor details over het taalbestand.
Geneste navigatie met $n
$n wordt gebruikt om dynamische navigatie te renderen op basis van geregistreerde routes:
{{ $n.render('menu_key') }}
Hulpprogramma's
{# Een variabelewaarde dumpen voor debuggen (vergelijkbaar met PHP var_dump) #}
{{ dump(variable) }}
{# Array naar string #}
{{ $e.join(list, ', ') }}
Aangepaste lokale events
Maak voor aangepaste events een LocalEvent-klasse en registreer die in de controller:
class AuthEvent extends LocalEvent {
@override
Future<void> run(Request rq) async {
var token = rq.getCookie('auth_token', def: '');
var user = await UserModel().findByToken(token: token);
rq.addParam('currentUser', user);
rq.addParam('isLoggedIn', user != null);
}
}
// In de controller:
rq.localEvents.add(AuthEvent());
return rq.renderView(path: 'home/index');
{# In het sjabloon: #}
{% if isLoggedIn %}
<span>{{ currentUser.name }}</span>
{% endif %}