Symfony 1.4 - format_currency API

时间:2013-06-11 01:04:34

标签: symfony-1.4

所以我正在处理一些用用户首选的货币格式格式化的数字,但遇到了一个巨大的wtf,想看看其他symfonians如何处理这个sitch。

使用NumberFormatter帮助器,我可以调用format_currency函数,如下所示:

function format_currency($amount, $currency = null, $culture = null)
{
  if (null === $amount)
  {
    return null;
  }

  $numberFormat = new sfNumberFormat(_current_language($culture));

  return $numberFormat->format($amount, 'c', $currency);
}

sfNumberFormat::format的签名如下:

function format($number, $pattern = 'd', $currency = 'USD', $charset = 'UTF-8')

看到问题?如果没有传递货币值,则format_currency签名允许使用默认的空货币值,然后覆盖sfNumberFormat::format签名的默认货币值。

我的目标是设置用户的首选货币一次,只需将号码传递给format_currency功能,因为传递X号码的货币值是有道理的。

我在想的是添加一个新的用户属性,它将存储用户的首选货币,然后将NumberFormat代码复制到我自己的lib / helper中,并引用用户的属性传递给sfNumberFormat::format调用。

任何symfonian以另一种方式解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以将货币传递给每次调用帮助程序的原因是您可以为一个用户使用多种货币,而不管他/她的文化设置如何。

我也没有看到将货币传递给每个助手调用的问题。

事实上,如果你创建一个依赖于session属性的帮助器,你将在用户对象和帮助器之间建立一个强大的耦合,我不是对的。你打算如何在帮助器中检索属性?您将要么必须调用sfContext::get(通常应避免使用)或将用户对象传递给帮助程序(这与传递属性完全相同,甚至更糟;)。)

答案 1 :(得分:0)

所以我最后只是将源NumberHelper函数复制并粘贴到我自己的lib / helper / NumberHelper.php中,并改变了currency_helper的签名:

// Before
function format_currency($amount, $currency = null, $culture = null)

// After
function format_currency($amount, $currency = 'USD', $culture = null)

这允许$ currency以相同的值(usd)传递给sfNumberFormat::format,而传递null。