Zend_Form и локализация чисел с плавающей точкой - PullRequest
0 голосов
/ 05 марта 2012

Я использую Zend_Form для обработки формы, и у меня проблема с локализацией.

Я использую следующее объявление поля:

$this->addElement('text', 'area', array(
        'label' => 'Area:',
        'required' => true,
        'filters' => array('StringTrim', 'NormalizedToLocalized')
    ));

Проблема в том, что я использую язык pl_PL ив этой локали разделитель десятичной точки - "," не ".".Но базы данных (MySQL) хранятся с "."separator.

Я добавил NormalizedToLocalized для преобразования, например, 40,12 в 40,12 в моей HTML-форме.

Но при передаче 40,12 в запросе POST я хочу, чтобы Zend_Form автоматически преобразовал обратно значение 40,12в 40.12, чтобы его можно было передать в БД (я собираю значения из формы с помощью метода $ form-> getValues ​​()).К настоящему времени он успешно отрисовывает 40,12, но в $ form-> getValues ​​() я получаю локализованное, а не нормализованное значение.

Поэтому мой вопрос заключается в том, можно ли создать другой фильтр для рендеринга и получения значенияполя в Zend Framework.

Заранее благодарим за помощь!

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Фильтры не применяются, пока форма не отправлена, поэтому 'NormalizedToLocalized' не будет иметь никакого эффекта, пока форма не будет опубликована.Поэтому, если вы хотите, чтобы для хранения данных использовались десятичные точки, а не запятые, удалите фильтр (или используйте 'LocalizedToNormalized') из формы и примените фильтр, используя Zend_Filter для любых данных, которые необходимо отобразить.Если это поле всегда ожидает тип с плавающей запятой, вы можете использовать validator , чтобы применить значение, а затем использовать фильтр для принудительного форматирования для базы данных.

$this->addElement('text', 'area', array(
        'label' => 'Area:',
        'required' => true,
        'validators' => array('Float'),
        'filters' => array('StringTrim', 'LocalizedToNormalized')
    ));
0 голосов
/ 05 марта 2012

Я не знаком с Zend Framework, но смотрю на имя фильтра, не должно ли это быть 'LocalizedToNormalized'?

...