【问题标题】:ZF2 Form: NumberFormat-filter with localizationZF2 表格:带本地化的 NumberFormat-filter
【发布时间】:2015-05-05 08:33:40
【问题描述】:

你,

如何为知道当前语言环境的字段集中的输入定义 NumberFormat 过滤器?我想要的是像 1000.33 这样的数字在视图中显示如下:1.000,33(或指定的任何语言环境)我已经尝试使用 InputFilterProviderInterface,但它在视图中没有任何影响:

<?php
namespace Customer\Form;

use Customer\Entity\OfferDay;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;

use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;

class OfferDayFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct($em)
    {
        parent::__construct('offerDayFieldset');

        $this->setHydrator(new DoctrineHydrator($em))
             ->setObject(new OfferDay());

        $this->add(array(
            'name' => 'price',
            'type' => 'Text',
            'options' => array(
                'label' => '',
            ),
        ));
    }

    public function getInputFilterSpecification()
    {
        return array(
            'price' => array(
                'required' => false,
                'filters' => array(
                    array(
                        'name' => 'NumberFormat',
                        'options' => array(
                            'locale' => 'de_DE',
                        ),
                    ),
                ),
            ),
        );
    }
}

在视图中,我通过formRow()-function 输出输入。

我也知道您可以像这样以编程方式使用 NumberFormat-Filter (l18n Filters - Zend Framework 2):

$filter = new \Zend\I18n\Filter\NumberFormat("de_DE");
echo $filter->filter(1234567.8912346);
// Returns "1.234.567,891"

但我想使用数组表示法。

有人做过类似的事情吗?

【问题讨论】:

    标签: forms filter localization zend-framework2 number-formatting


    【解决方案1】:

    好吧,这似乎不像我想的那么简单:) 但我找到了解决方案。

    首先像这样定义过滤器:

    public function getInputFilterSpecification()
    {
        return array(
            'price' => array(
                'required' => false,
                'filters' => array(
                    array(
                        'name' => 'NumberFormat',
                        'options' => array(
                            'locale' => 'de_DE',
                            'style' => NumberFormatter::DECIMAL,
                            'type' => NumberFormatter::TYPE_DOUBLE,
                        ),
                    ),
                ),
            ),
        );
    }
    

    而 locale 是当前使用的语言环境。这会将数字格式化为正确的格式,然后再将其保存到数据库中。

    在视图中,您可以使用过滤视图助手将数字转换为正确的格式:

    <?php
        $this->plugin("numberformat")
             ->setFormatStyle(NumberFormatter::DECIMAL)
             ->setFormatType(NumberFormatter::TYPE_DOUBLE)
             ->setLocale("de_DE");
    ?>
    
    <p>
        <?php 
            $currentElement = $form->get('price');
            $currentElement->setValue($this->numberFormat($currentElement->getValue())); 
            echo $this->formRow($currentElement);
        ?>
    </p>
    

    结果: 数据库:12.345 -> 查看:12,345 -> 数据库:12.345

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 2019-07-03
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多