所以我正在处理一些用用户首选的货币格式格式化的数字,但遇到了一个巨大的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以另一种方式解决这个问题?
答案 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。