如何在树枝中获取货币符号,symfony2?

ihs*_*san 3 symfony twig symfony-2.1

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

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

然后将其传递给树枝。

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

谢谢。

ihs*_*san 5

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

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';
    }
}
Run Code Online (Sandbox Code Playgroud)

服务:

acme.twig.acme_extension:
    class: Acme\DemoBundle\Twig\AcmeExtension
    tags:
        - { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)

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

twig:
    globals:
        locale: %locale%
Run Code Online (Sandbox Code Playgroud)

最后在树枝模板中:

{{ currencySymbol(locale) }}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个但是在实现它之后,而不是英镑(或任何其他货币符号),我似乎只得到一个奇怪的小符号 ¤,搜索时没有结果。 (4认同)