رویدادهای قالب فینچ
فینچ یک شیء $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 مراجعه کنید.
Navigation تودرتو با $n
$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 %}