3

現在、symfony2コントローラーで通貨記号を取得できます

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

そしてそれを小枝に渡します。

ただし、多くの小枝テンプレートでこの通貨記号を取得する必要があるため、対応するコントローラーにそのコードを挿入するのは楽しいことではありません。それで、これを小枝で直接行うためのより良い/より簡単な方法はありますか?

ありがとう。

4

1 に答える 1

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';
    }
}

サービス:

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

symfony2 parameters.iniで現在定義されているロケールを取得してtwig関数に渡す必要があるため、グローバルなtwig値を定義します。

twig:
    globals:
        locale: %locale%

そして最後に小枝テンプレートで:

{{ currencySymbol(locale) }}
于 2013-03-15T12:40:21.267 に答える