diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 540a83f5e5..71166f0bb7 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -1600,7 +1600,21 @@ class baseRouter $default = $param->getDefaultValue(); } - $defaultParams[$name] = $default; + $type = 'string'; + if(isset($paramDefaultType[$appName][$className][$methodName][$name])) + { + $type = $paramDefaultType[$appName][$className][$methodName][$name]; + } + elseif(isset($paramDefaultType[$className][$methodName][$name])) + { + $type = $paramDefaultType[$className][$methodName][$name]; + } + elseif(!$isEncrypted && method_exists($param, 'hasType') && $param->hasType()) + { + $type = $param->getType()->getName(); + } + + $defaultParams[$name] = array('default' => $default, 'type' => $type); } /** @@ -2471,15 +2485,17 @@ class baseRouter $passedParams = array_values($passedParams); $i = 0; - foreach($defaultParams as $key => $defaultValue) + foreach($defaultParams as $key => $defaultItem) { if(isset($passedParams[$i])) { - $defaultParams[$key] = strip_tags($passedParams[$i]); + $defaultParams[$key] = helper::convertType(strip_tags((string) $passedParams[$i]), $defaultItem['type']); } else { - if($defaultValue === '_NOT_SET') $this->triggerError("The param '$key' should pass value. ", __FILE__, __LINE__, $exit = true); + if($defaultItem['default'] === '_NOT_SET') $this->triggerError("The param '$key' should pass value. ", __FILE__, __LINE__, $exit = true); + + $defaultParams[$key] = $defaultItem['default']; } $i ++; } diff --git a/framework/helper.class.php b/framework/helper.class.php index 78dbc6b971..3439af8976 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -359,6 +359,39 @@ class helper extends baseHelper { return !defined('USE_INTRANET') ? false : USE_INTRANET; } + + /** + * 转换类型。 + * Convert the type. + * + * @param mixed $value + * @param string $type + * @static + * @access public + * @return array|bool|float|int|object|string + */ + public static function convertType($value, $type) + { + switch($type) + { + case 'int': + return (int)$value; + case 'float': + return (float)$value; + case 'bool': + return (bool)$value; + case 'array': + return (array)$value; + case 'object': + return (object)$value; + case 'datetime': + case 'date': + return $value ? (string)$value : null; + case 'string': + default: + return (string)$value; + } + } } /**