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() }}
{# 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 %}