2012-12-28 56 views

回答

14

伏功能作爲字符串替換和不實際調用底層函數。 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> 
相關問題