|
|
@@ -26,6 +26,21 @@ class FloatType extends \Cake\Database\Type
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
+ * The class to use for representing number objects
|
|
|
+ *
|
|
|
+ * @var string
|
|
|
+ */
|
|
|
+ public static $numberClass = 'Cake\I18n\Number';
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Whether numbers should be parsed using a locale aware parser
|
|
|
+ * when marshalling string inputs.
|
|
|
+ *
|
|
|
+ * @var bool
|
|
|
+ */
|
|
|
+ protected $_useLocaleParser = false;
|
|
|
+
|
|
|
+ /**
|
|
|
* Convert integer data into the database format.
|
|
|
*
|
|
|
* @param string|resource $value The value to convert.
|
|
|
@@ -81,7 +96,47 @@ class FloatType extends \Cake\Database\Type
|
|
|
}
|
|
|
if (is_numeric($value)) {
|
|
|
return (float)$value;
|
|
|
+ } elseif (is_string($value) && $this->_useLocaleParser) {
|
|
|
+ return $this->_parseValue($value);
|
|
|
}
|
|
|
+
|
|
|
return $value;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Sets whether or not to parse numbers passed to the marshal() function
|
|
|
+ * by using a locale aware parser.
|
|
|
+ *
|
|
|
+ * @param bool $enable Whether or not to enable
|
|
|
+ * @return $this
|
|
|
+ */
|
|
|
+ public function useLocaleParser($enable = true)
|
|
|
+ {
|
|
|
+ if ($enable === false) {
|
|
|
+ $this->_useLocaleParser = $enable;
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+ if (static::$numberClass === 'Cake\I18n\Number' ||
|
|
|
+ is_subclass_of(static::$numberClass, 'Cake\I18n\Number')
|
|
|
+ ) {
|
|
|
+ $this->_useLocaleParser = $enable;
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+ throw new RuntimeException(
|
|
|
+ sprintf('Cannot use locale parsing with the %s class', static::$numberClass)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Converts a string into a float point after parseing it using the locale
|
|
|
+ * aware parser.
|
|
|
+ *
|
|
|
+ * @param string $value The value to parse and convert to an float.
|
|
|
+ * @return float
|
|
|
+ */
|
|
|
+ protected function _parseValue($value)
|
|
|
+ {
|
|
|
+ $class = static::$numberClass;
|
|
|
+ return $class::parseFloat($value);
|
|
|
+ }
|
|
|
}
|