Forms ZendFramework 2:表单中的区域设置货币值
是否有任何方法可以从Form construct方法或ViewHelper中转换文本输入如何以正确的区域设置数字格式以其值显示货币 e、 gForms ZendFramework 2:表单中的区域设置货币值,forms,zend-framework2,locale,Forms,Zend Framework2,Locale,是否有任何方法可以从Form construct方法或ViewHelper中转换文本输入如何以正确的区域设置数字格式以其值显示货币 e、 g 数据库中的值为10000.50 在美国或英国,被视为10000.50 以欧元计,被视为10.000,50 我已经能够在控制器、模型和视图中进行转换,但还没有遇到如何在这里进行转换的问题 谢谢 Aborgrove您有Zend\I18n组件,它提供格式化程序来格式化数字。您可以对一般数字使用NumberFormat,对特定货币使用CurrencyFormat
Aborgrove您有
Zend\I18n
组件,它提供格式化程序来格式化数字。您可以对一般数字使用NumberFormat
,对特定货币使用CurrencyFormat
这些格式化程序位于Zend\I18n\View\Helper
域中,但实际上并不依赖于视图。因此,您可以在任何地方使用它们:
use Zend\I18n\View\Helper\CurrencyFormat;
$formatter = new CurrencyFormat;
$formatter->setLocale('en-US');
$currency = $formatter(1234.56, 'EUR'); // "€1,234.56"
$currency = $formatter(1234.56, 'USD'); // "$1,234.56"
$formatter->setLocale('nl-NL');
$currency = $formatter(1234.56, 'EUR'); // "€ 1.234,56"
你必须意识到两件事:
locale::setDefault()
设置默认区域设置)如果只想格式化数字而不需要任何货币代码,只需使用
Zend\I18n\View\Helper\NumberFormat
。有关格式化的详细信息,请参阅。您有Zend\I18n
组件,该组件提供格式化程序来格式化数字。您可以对一般数字使用NumberFormat
,对特定货币使用CurrencyFormat
这些格式化程序位于Zend\I18n\View\Helper
域中,但实际上并不依赖于视图。因此,您可以在任何地方使用它们:
use Zend\I18n\View\Helper\CurrencyFormat;
$formatter = new CurrencyFormat;
$formatter->setLocale('en-US');
$currency = $formatter(1234.56, 'EUR'); // "€1,234.56"
$currency = $formatter(1234.56, 'USD'); // "$1,234.56"
$formatter->setLocale('nl-NL');
$currency = $formatter(1234.56, 'EUR'); // "€ 1.234,56"
你必须意识到两件事:
locale::setDefault()
设置默认区域设置)如果只想格式化数字而不需要任何货币代码,只需使用
Zend\I18n\View\Helper\NumberFormat
。有关格式的详细信息,请参见。您能解释一下要在何处显示货币吗?它是一个标签吗?谢谢Jurian,更新了更多信息。保留输入变量也有点棘手。您必须读取UserSession以找到他的区域设置,然后更改/切换输入的验证器。可以使用更改DefaultValue(与将数字还原为正确格式以将其安全保存到DB相同)。谢谢Sam,我的表单的inputFilter正在根据区域设置将所有值转换回十进制格式,以便保存回DB。我的问题是将语言环境转换成表单渲染功能。所以我可以让视图尽可能简单:$this->formCollection($budget\u form);你能解释一下你想在哪里显示货币吗?它是一个标签吗?谢谢Jurian,更新了更多信息。保留输入变量也有点棘手。您必须读取UserSession以找到他的区域设置,然后更改/切换输入的验证器。可以使用更改DefaultValue(与将数字还原为正确格式以将其安全保存到DB相同)。谢谢Sam,我的表单的inputFilter正在根据区域设置将所有值转换回十进制格式,以便保存回DB。我的问题是将语言环境转换成表单渲染功能。所以我可以让视图尽可能简单:$this->formCollection($budget\u form);感谢Jurian,为了维护最简单的视图,例如echo$this->formCollection($budget\u form);我想我需要创建一个自定义表单ViewHelper在其中应用转换,以便使转换远离控制器或视图本身,你同意吗?如果你想在单行中显示表单,是的:你必须为此创建一个自定义显示帮助器。谢谢Jurian,为了维护最简单的视图,例如echo$this->formCollection($budget\u form);我想我需要创建一个自定义表单ViewHelper在其中应用转换,以便使转换远离控制器或视图本身,您同意吗?如果您想在单行中显示表单,是:您必须为此创建一个自定义显示帮助器。