Точка, точка, запятая

В русской локали разделитель десятичных разрядов – запятая. И это доставляет определенные неудобства при обновлении полей БД – MySQL не взирая на лица локаль для полей типа DOUBLE и FLOAT хочет видеть в качестве десятичного разделителя точку. И точка.

При установленной руской локали достаточно неосторожного движения пальца и вы в жопе, например:

как значение переменной будет ‘7,62’. И у MySQL команда

вызовет изжогу. А вот заключение значения в кавычки, как ни странно, никаких последствий играть не будет:

при том, что тип у weapon.caliber – FLOAT, срабатывает отлично.

А еще MS Excel вместе с OpenOffice очень любят экспортировать данные с запятой в качестве десятичного разделителя.

А еще пользователь при вводе данных вполне может опечататься – на дополнительной цифровой клавиатуре при русской раскладке точка становится запятой.

Обычно я при подготовке данных для записи в таблицу на вякий случай делаю что-то типа

Это однообразное действие меня слегка достало и я написал крошечный Behavior для CakePHP, который перед записью заменяет запятые на точки у полей с типом FLOAT и DOUBLE.

Заодно поклонники процедурного программирования могут поприкалываться на тему того, как одна строчка вызова функции превращается в метод класа и сколько получается дополнительного кода. :-)

Behavior подключается как обычно:

в этом случае будут обрабатываться данные всех полей указанных типов. Можно указать самому, данные для каких полей обрабатывать:

В этом случае будет обрабатываться только поле price. А также при инициализации не будет проиходить перебор всех полей модели с целью определения их типа. Т.е. по идее можно написать и имя текстового поля. ;-)

Автор

Сергей Родовниченко

Родился, учился, работал и все такое. Занимаюсь поддержкой сайтов на Shop-Script, Joomla, Wordpress, Prestashop. А также на самописных движках на базе CakePHP.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *