С помощью "." для десятичных чисел в Zend валидатора поплавка - PullRequest
3 голосов
/ 15 февраля 2012

У меня есть форма с элементом «цена». Я проверяю этот элемент с помощью валидатора "float". Дело в том, когда я вставляю, например:

12,50 => это допустимо, но когда я пытаюсь сохранить его в БД (mysql), оно сохраняется как "12.00"

Так что я хочу изменить десятичный знак с "," на ".". Кто-нибудь знает как ??

Примечание. Если я поставлю:

$price->addValidator('Float', 'de')

или

$validator = new Zend_Validate_Float(array('locale' => 'de'));
$price->addValidator($validator)

Не работает.

1 Ответ

10 голосов
/ 15 февраля 2012

Вы можете использовать фильтр Zend_Filter LocalizedToNormalized, чтобы он нормализовал вашу локализованную цену в соответствии с локалью пользователя.

Типичный элемент цены будет таким:

$price = new Zend_Form_Element_Text('price');
$price->setLabel('Price:')
      ->setRequired(true)
      ->setAttribs(array('required name' => 'price', 'maxlength' => '12'))
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addFilter('pregReplace', array('match' => '/\s+/', 'replace' => ''))
      ->addFilter('LocalizedToNormalized')
      ->addValidator('stringLength', true, array(1, 12))
      ->addValidator('float', true, array('locale' => 'en_US'))
      ->addValidator('greaterThan', true, array('min' => 0));
$this->addElement($price);

Конечно, вы можете улучшить его и добавить нужные вам валидаторы / фильтры.

...