如何在树枝上获得货币符号,symfony2?

时间:2013-03-14 16:17:25

标签: symfony twig symfony-2.1

我目前能够在symfony2控制器中获得货币符号

$formatter = new \NumberFormatter($this->getRequest()->getLocale(),\NumberFormatter::CURRENCY);
$symbol = $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL);

然后将它传递给树枝。

但是,因为我需要在许多树枝模板中获取此货币符号,所以在相应的控制器中插入该代码并不是一件令人愉快的事情。那么,有没有更好/更简单的方法直接在树枝上做到这一点?

感谢。

1 个答案:

答案 0 :(得分:4)

以下是我创建自定义树枝功能的方法

namespace Acme\DemoBundle\Twig;

class AcmeExtension extends \Twig_Extension
{
    public function getFunctions() {
        return array(
            'currencySymbol' => new \Twig_Function_Method($this, 'currencySymbolFunction'),
        );
    }

    public function currencySymbolFunction($locale) {
        $locale = $locale == null ? \Locale::getDefault() : $locale;
        $formatter = new \NumberFormatter($locale, \NumberFormatter::CURRENCY);
        $symbol = $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL);

        return $symbol;
    }

    public function getName() {
        return 'acme_extension';
    }
}

服务:

acme.twig.acme_extension:
    class: Acme\DemoBundle\Twig\AcmeExtension
    tags:
        - { name: twig.extension }

因为我需要获取并将symfony2 parameters.ini中当前定义的语言环境传递给twig函数,所以我定义了一个全局树枝值:

twig:
    globals:
        locale: %locale%

最后在树枝模板中:

{{ currencySymbol(locale) }}