【问题标题】:How can I set up a user defined function in Volt (Phalcon)如何在 Volt (Phalcon) 中设置用户定义的函数
【发布时间】:2012-12-13 19:58:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: php phalcon volt


    【解决方案1】:

    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 函数是如何注册的。它使用传递的$key 参数返回一个字符串\My\Locale::translate({$key})。此 Volt 语法将被转换为 PHP 指令并由 PHP 执行。因此查看字符串:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      相关资源
      最近更新 更多