ZF2 Form:NumberFormat带有本地化功能的过滤器



hy,

如何在了解当前语言环境的字段集中为输入定义NumberFormat筛选器?我想要的是像1000.33这样的数字显示在视图中,如下所示:1.000,33(或指定的任何区域设置)我已经用InputFilterProviderInterface尝试过了,但它在视图中没有任何效果:

<?php
namespace CustomerForm;
use CustomerEntityOfferDay;
use DoctrineModuleStdlibHydratorDoctrineObject as DoctrineHydrator;
use ZendFormFieldset;
use ZendInputFilterInputFilterProviderInterface;
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()-函数输出输入。

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

$filter = new ZendI18nFilterNumberFormat("de_DE");
echo $filter->filter(1234567.8912346);
// Returns "1.234.567,891"

但我想用数组表示法。

有人做过类似的事吗?

好吧,这似乎不像我想象的那么微不足道:)但我得到了一个解决方案。

首先定义这样的过滤器:

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,
                    ),
                ),
            ),
        ),
    );
}

语言环境是当前使用的语言环境。这会在将数字保存到数据库之前将其格式化为当前格式。

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

<?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->视图:12345->数据库:12.345

最新更新