gpt4 book ai didi

php - 如何在 Volt (Phalcon) 中设置用户定义的函数

转载 作者:可可西里 更新时间:2023-11-01 12:29:14 25 4
gpt4 key购买 nike

如何在 Volt 中设置用户定义的函数?例如,我想调用一个函数来翻译我的 View 中的字符串:

<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>

我希望 tr 映射到函数 \My\Locale::translate($key)

最佳答案

Volt 函数充当字符串替换,实际上并不调用底层函数。 Volt 将函数翻译成相关的字符串,然后由 PHP 解释。

假设您有一个 Locale 类,它有一个 translate 方法:

public static function translate()
{
$return = '';

if (isset(self::$_phrases[$key]))
{
$return = self::$_phrases[$key];
}

return $return;
}

此方法使用 $_phrases 内部数组来查找您传递的相关键并返回所需短语的文本。如果未找到,则返回一个空字符串。

现在我们需要在Volt中注册这个函数。

    $di->set(
'volt',
function($view, $di) use($config)
{
$volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions(
array(
'compiledPath' => $config->app_volt->path,
'compiledExtension' => $config->app_volt->extension,
'compiledSeparator' => $config->app_volt->separator,
'stat' => (bool) $config->app_volt->stat,
)
);
$volt->getCompiler()->addFunction(
'tr',
function($key)
{
return "\\My\\Locale::translate({$key})";
}
);

return $volt;
},
true
);

注意 tr 函数是如何注册的。它返回一个字符串 \My\Locale::translate({$key}) 以及传递的 $key 参数。此 Volt 语法将被翻译成 PHP 指令并由 PHP 执行。因此 View 字符串:

<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>

经过Volt处理后变成:

<div class='page-header'>
<h2><?php echo \My\Locale::translate('session_login_title') ?></h2>
</div>

关于php - 如何在 Volt (Phalcon) 中设置用户定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14071428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com