Finch 模板事件
Finch 在每次 Jinja 渲染时注入一个全局 $e 对象(模板事件)。该对象提供用于资源、路由、Cookie、语言和各种工具的辅助方法。
全局变量
| 变量 | 描述 |
|---|---|
$language |
当前语言代码 — 例如 'en'、'zh' |
$isDebug |
应用是否在调试模式下运行 |
$domain |
来自 FinchConfigs 的公共域名 |
资源辅助方法
{# 加载 CSS 文件 #}
{{ $e.css('/public/css/app.css') }}
{# 加载 JS 文件 #}
{{ $e.js('/public/js/app.js') }}
路由和 URL 辅助方法
{# 根据路由键生成 URL #}
<a href="{{ $e.routeUrl('root') }}">首页</a>
<a href="{{ $e.routeUrl('users.show', {'id': user.id}) }}">个人资料</a>
{# 当前 URL #}
{{ $e.currentUrl() }}
Cookie 辅助方法
{# 读取 Cookie #}
{% set theme = $e.getCookie('theme', 'light') %}
语言辅助方法
{# 生成语言切换链接 #}
{{ $e.langUrl('en') }} {# 英文 URL #}
{{ $e.langUrl('zh') }} {# 中文 URL #}
使用 $t 翻译
使用 $t 从语言文件中获取本地化字符串:
{{ $t('welcome') }}
{{ $t('greeting', {'name': user.name}) }}
语言文件详情请参阅本地化。
使用 $n 进行嵌套导航
$n 用于基于已注册路由渲染动态导航:
{{ $n.render('menu_key') }}
工具方法
{# 调试时转储变量值(类似 PHP 的 var_dump)#}
{{ dump(variable) }}
{# 数组转字符串 #}
{{ $e.join(list, ', ') }}
自定义本地事件
对于自定义事件,创建一个 LocalEvent 类并在控制器中注册它:
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);
}
}
// 在控制器中:
rq.localEvents.add(AuthEvent());
return rq.renderView(path: 'home/index');
{# 在模板中:#}
{% if isLoggedIn %}
<span>{{ currentUser.name }}</span>
{% endif %}