自定义 Twig 过滤器和函数可以在 CMS 中通过 registerMarkupTags 方法进行注册。本文描述了如何注册您自己的 Twig 过滤器和函数,这些函数可以在 CMS 和邮件模板中使用。
public function registerMarkupTags()
{
return [
'filters' => [
// ...Filters defined here
],
'functions' => [
// ...Functions defined here
]
];
}filters 键在注册数组中可用于 Twig 过滤器。例如,|plural 过滤器可以映射到全局 PHP 函数 str_plural() 使用以下值。
'filters' => [
'plural' => 'str_plural'
]你也可以传递一个本地方法。例如,|uppercase 可以映射到 $this->makeAllCaps() 方法。
'filters' => [
'uppercase' => [$this, 'makeTextAllCaps']
]这在 Twig 中将表现为以下形式。
{{ 'my text'|uppercase }}与过滤器类似,functions 键可用于创建 Twig 函数。例如,该函数可以转而映射到 Form::open() 的静态方法调用。
'functions' => [
'form_open' => [Form::class, 'open']
]静态调用也支持通配符定义。在此示例中,函数调用 url_foobar() 将转换为方法调用 Url::foobar 等。
'functions' => [
'url_*' => [Url::class, '*'],
]传递闭包对于任一定义也允许。
'functions' => [
'hello_world' => function() { return 'Hello World!'; }
]这在 Twig 中现已可用,如下所示。
{{ hello_world() }}值得注意的是,自定义 Twig 过滤器和函数默认情况下不进行转义。 要默认启用转义,请在定义中将最后一个数组值设为 true。
public function registerMarkupTags()
{
return [
'functions' => [
// Escaped Functions
'input' => ['input', true],
// Raw Functions
'link_to' => 'link_to',
// Escaped Classes
'str_*' => [\Str::class, '*', true],
// Raw Classes
'url_*' => [\Url::class, '*'],
],
'filters' => [
// Escaped Filters
'display_name' => [fn ($user) => $user->getDisplayName(), true],
// Raw Filters
'avatar_url' => [fn ($user) => $user->getAvatarUrl()],
// Escaped Classes
'str_*' => [\Str::class, '*', true],
// Raw Classes
'url_*' => [\Url::class, '*'],
]
];
}