7
如何在Volt中設置用戶定義的功能?比如我想調用會轉化在我的意見的字符串作爲這樣的功能:如何在Volt(Phalcon)中設置用戶定義的功能
<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>
,我想tr
映射到一個功能\My\Locale::translate($key)
如何在Volt中設置用戶定義的功能?比如我想調用會轉化在我的意見的字符串作爲這樣的功能:如何在Volt(Phalcon)中設置用戶定義的功能
<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>
,我想tr
映射到一個功能\My\Locale::translate($key)
伏功能作爲字符串替換和不實際調用底層函數。 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執行。因此,視圖的字符串:
<div class='page-header'>
<h2>{{ tr('session_login_title') }}</h2>
</div>
伏之後,處理就變成:
<div class='page-header'>
<h2><?php echo \My\Locale::translate('session_login_title') ?></h2>
</div>