Sf2:国际组件,格式货币
Sf2 : Intl component, formatCurrency
我在 twig 扩展中使用 intl 组件来获取货币符号。
非常简单,因为解释得很好here。
但我想做的是根据货币/当地格式化价格。
intl组件中确实有一个方法formatCurrency(NumberFormatter class)
<?php
namespace SE\AppBundle\Twig;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Intl\Intl;
class PriceExtension extends \Twig_Extension
{
private $em;
private $requestStack;
public function __construct(EntityManager $em, RequestStack $requestStack)
{
$this->em = $em;
$this->requestStack = $requestStack;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($price)
{
$request = $this->requestStack->getCurrentRequest();
$currency_code = $request->cookies->get('currency');
$exchange_rate = $this->em->getRepository('ApiBundle:ExchangeRates')->findOneBy(array('code' => $currency_code));
$price = $price*$exchange_rate->getRate();
// Get the currency symbol
// $symbol = Intl::getCurrencyBundle()->getCurrencySymbol($currency_code);
// $price = $symbol.$price;
// Undefined formatCurrency method
$price = Intl::getCurrencyBundle()->formatCurrency($price, $currency_code);
return $price;
}
public function getName()
{
return 'price_extension';
}
}
我怎样才能使用 formatCurrency 方法?
整个Intl Component is just replacement layer for cases where you don't have installed intl
extension.
因此您的代码应如下所示:
<?php
namespace SE\AppBundle\Twig;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Intl\NumberFormatter\NumberFormatter;
class PriceExtension extends \Twig_Extension
{
private $em;
private $requestStack;
public function __construct(EntityManager $em, RequestStack $requestStack)
{
$this->em = $em;
$this->requestStack = $requestStack;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($price)
{
$request = $this->requestStack->getCurrentRequest();
$currency_code = $request->cookies->get('currency');
$exchange_rate = $this->em->getRepository('ApiBundle:ExchangeRates')->findOneBy([
'code' => $currency_code
]);
$price = $price*$exchange_rate->getRate();
if(false === extension_loaded('intl')) {
$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);
} else {
$formatter = new \NumberFormatter(
$request->getLocale(),
\NumberFormatter::CURRENCY
);
}
return $formatter->formatCurrency($price, $currency_code);
}
public function getName()
{
return 'price_extension';
}
}
我在 twig 扩展中使用 intl 组件来获取货币符号。
非常简单,因为解释得很好here。
但我想做的是根据货币/当地格式化价格。
intl组件中确实有一个方法formatCurrency(NumberFormatter class)
<?php
namespace SE\AppBundle\Twig;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Intl\Intl;
class PriceExtension extends \Twig_Extension
{
private $em;
private $requestStack;
public function __construct(EntityManager $em, RequestStack $requestStack)
{
$this->em = $em;
$this->requestStack = $requestStack;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($price)
{
$request = $this->requestStack->getCurrentRequest();
$currency_code = $request->cookies->get('currency');
$exchange_rate = $this->em->getRepository('ApiBundle:ExchangeRates')->findOneBy(array('code' => $currency_code));
$price = $price*$exchange_rate->getRate();
// Get the currency symbol
// $symbol = Intl::getCurrencyBundle()->getCurrencySymbol($currency_code);
// $price = $symbol.$price;
// Undefined formatCurrency method
$price = Intl::getCurrencyBundle()->formatCurrency($price, $currency_code);
return $price;
}
public function getName()
{
return 'price_extension';
}
}
我怎样才能使用 formatCurrency 方法?
整个Intl Component is just replacement layer for cases where you don't have installed intl
extension.
因此您的代码应如下所示:
<?php
namespace SE\AppBundle\Twig;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Intl\NumberFormatter\NumberFormatter;
class PriceExtension extends \Twig_Extension
{
private $em;
private $requestStack;
public function __construct(EntityManager $em, RequestStack $requestStack)
{
$this->em = $em;
$this->requestStack = $requestStack;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($price)
{
$request = $this->requestStack->getCurrentRequest();
$currency_code = $request->cookies->get('currency');
$exchange_rate = $this->em->getRepository('ApiBundle:ExchangeRates')->findOneBy([
'code' => $currency_code
]);
$price = $price*$exchange_rate->getRate();
if(false === extension_loaded('intl')) {
$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);
} else {
$formatter = new \NumberFormatter(
$request->getLocale(),
\NumberFormatter::CURRENCY
);
}
return $formatter->formatCurrency($price, $currency_code);
}
public function getName()
{
return 'price_extension';
}
}