2013-03-14 2 views
2

나는 현재 symfony2 컨트롤러나뭇 가지, symfony2에서 통화 기호를 얻는 방법?

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

에 통화 기호를 얻을 후 나뭇 가지에 전달할 수 있어요.

그러나 많은 나뭇 가지 템플릿에서이 통화 기호를 가져와야하기 때문에 해당 코드에 해당 코드를 삽입하는 것은 즐거운 일이 아닙니다. 자, 나뭇 가지에서 직접 처리하는 것이 더 좋고/더 쉬운 방법이 있습니까?

감사합니다. 여기

+2

나뭇 가지 확장은 괜찮습니까? – Prisoner

+0

당신 말이 맞아요. 나는 나뭇 가지 확장 요리 책을 놓쳤다. 덕분에 – ihsan

답변

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

+0

@doug 어떤 경우에는 필터에 $ 통화 ('EUR'와 같은 문자열이어야 함)를 전달한 다음 새 형식 작성 줄을 $ formatter = new \ NumberFormatter ($ locale. "@ currency = $ currency ", \ NumberFormatter :: CURRENCY); – Cesc

관련 문제