2013-03-14 80 views
2

我目前能得到的Symfony2控制器如何在树枝,symfony2中获取货币符号?

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

货币符号,然后把它传递给枝杈。

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

谢谢。

+2

枝条延伸会好吗? – Prisoner 2013-03-14 16:54:01

+0

你是对的。我错过了嫩枝延伸食谱。谢谢 – ihsan 2013-03-15 11:45:13

回答

3

这是我如何创建自定义函数树枝

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: 
    globals: 
     locale: %locale% 

最后在树枝模板中:

{{ currencySymbol(locale) }} 
+3

然而,在实施它之后,我喜欢这个,而不是英镑(或者任何其他货币符号),我似乎只是得到了一个奇怪的小符号¤在搜索时没有结果。 – Doug 2014-08-12 01:41:19

+0

@doug在你可以通过$ currency(应该是一个像'EUR'这样的字符串)的情况下,过滤器,然后改变新的格式化线为$ formatter = new \ NumberFormatter($ locale。“@ currency = $ currency“,\ NumberFormatter :: CURRENCY); – Cesc 2017-01-09 11:58:57