رویدادهای قالب فینچ

فینچ یک شیء $e (رویداد قالب) جهانی را به هر رندر Jinja تزریق می‌کند. این شیء متدهای کمکی برای asset‌ها، route ها، کوکی‌ها، زبان، و ابزارهای مختلف دارد.

متغیرهای جهانی

متغیر توضیح
$language کد زبان جاری — مثلاً 'en'، 'fa'
$isDebug آیا برنامه در حالت debug اجرا می‌شود
$domain دامنه عمومی از FinchConfigs

کمک‌های asset

{# بارگذاری یک فایل CSS #}
{{ $e.css('/public/css/app.css') }}

{# بارگذاری یک فایل JS #}
{{ $e.js('/public/js/app.js') }}

کمک‌های route و URL

{# تولید URL بر اساس کلید مسیر #}
<a href="{{ $e.routeUrl('root') }}">صفحه اصلی</a>
<a href="{{ $e.routeUrl('users.show', {'id': user.id}) }}">پروفایل</a>

{# آدرس URL جاری #}
{{ $e.currentUrl() }}

کمک‌های کوکی

{# خواندن یک کوکی #}
{% set theme = $e.getCookie('theme', 'light') %}

کمک‌های زبان

{# تنظیم لینک‌های تغییر زبان #}
{{ $e.langUrl('en') }}   {# URL برای انگلیسی #}
{{ $e.langUrl('fa') }}   {# URL برای فارسی #}

ترجمه با $t

از $t برای دریافت رشته‌های محلی‌شده از فایل‌های زبان استفاده کنید:

{{ $t('welcome') }}
{{ $t('greeting', {'name': user.name}) }}

برای جزئیات فایل زبان به Localization مراجعه کنید.

$n برای رندر navigation پویا بر اساس مسیرهای ثبت‌شده استفاده می‌شود:

{{ $n.render('menu_key') }}

ابزارهای کاربردی

{# رندر مقدار یک متغیر برای debug (مشابه var_dump PHP) #}
{{ dump(variable) }}

{# آرایه به رشته #}
{{ $e.join(list, ', ') }}

رویدادهای محلی سفارشی

برای رویداد‌های سفارشی، یک کلاس LocalEvent بسازید و آن را در 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);
  }
}
// در controller:
rq.localEvents.add(AuthEvent());
return rq.renderView(path: 'home/index');
{# در قالب: #}
{% if isLoggedIn %}
  <span>{{ currentUser.name }}</span>
{% endif %}