如何在Volt中设置用户定义的功能?例如,我想调用一个可以在我的视图中翻译字符串的函数:
<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望tr映射到一个函数\My\Locale::translate($key)
Nik*_*los 17
Volt函数充当字符串替换,实际上不调用底层函数.Volt将函数转换为相关的字符串,然后由PHP解释.
假设您有一个Locale具有如下translate方法的类:
public static function translate()
{
$return = '';
if (isset(self::$_phrases[$key]))
{
$return = self::$_phrases[$key];
}
return $return;
}
Run Code Online (Sandbox Code Playgroud)
此方法使用$_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
);
Run Code Online (Sandbox Code Playgroud)
注意该tr功能是如何注册的.它返回\My\Locale::translate({$key})带有传递$key参数的字符串.此Volt语法将转换为PHP指令并由PHP执行.因此视图字符串:
<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>
Run Code Online (Sandbox Code Playgroud)
在Volt处理后,它变为:
<div class='page-header'>
<h2><?php echo \My\Locale::translate('session_login_title') ?></h2>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7588 次 |
| 最近记录: |