2012-12-28 29 views

答えて

14

ボルト関数は、文字列の置き換えとして機能し、実際にはない機能にマッピングする。たとえば、私のような私の意見で文字列を翻訳しまう関数を呼び出したいです基礎となる関数を呼び出します。 Voltは関数を関連する文字列に変換します。関連する文字列はPHPによって解釈されます。

はあなたのようなtranslate方法を持っているLocaleクラスがあるとします。

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機能が登録されていることに注意してください。渡された$keyパラメータを持つ文字列\My\Locale::translate({$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> 
関連する問題