Forms ZendFramework 2:表单中的区域设置货币值

Forms 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

是否有任何方法可以从Form construct方法或ViewHelper中转换文本输入如何以正确的区域设置数字格式以其值显示货币

e、 g

  • 数据库中的值为10000.50
  • 在美国或英国,被视为10000.50
  • 以欧元计,被视为10.000,50
  • 我已经能够在控制器、模型和视图中进行转换,但还没有遇到如何在这里进行转换的问题

    谢谢


    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()
    设置默认区域设置)
  • “EUR”或“USD”仅用于标志,并与区域设置一起添加到格式化的数字之前或之后

  • 如果只想格式化数字而不需要任何货币代码,只需使用
    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()
    设置默认区域设置)
  • “EUR”或“USD”仅用于标志,并与区域设置一起添加到格式化的数字之前或之后

  • 如果只想格式化数字而不需要任何货币代码,只需使用
    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在其中应用转换,以便使转换远离控制器或视图本身,您同意吗?如果您想在单行中显示表单,是:您必须为此创建一个自定义显示帮助器。