我目前能够在symfony2控制器中获得货币符号
$formatter = new \NumberFormatter($this->getRequest()->getLocale(),\NumberFormatter::CURRENCY);
$symbol = $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL);
然后将它传递给树枝。
但是,因为我需要在许多树枝模板中获取此货币符号,所以在相应的控制器中插入该代码并不是一件令人愉快的事情。那么,有没有更好/更简单的方法直接在树枝上做到这一点?
感谢。
答案 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) }}