|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace think; |
|
|
|
|
|
class Config |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
private static $config = []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static $range = '_sys_'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function range($range) |
|
|
{ |
|
|
self::$range = $range; |
|
|
|
|
|
if (!isset(self::$config[$range])) self::$config[$range] = []; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function parse($config, $type = '', $name = '', $range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
if (empty($type)) $type = pathinfo($config, PATHINFO_EXTENSION); |
|
|
|
|
|
$class = false !== strpos($type, '\\') ? |
|
|
$type : |
|
|
'\\think\\config\\driver\\' . ucwords($type); |
|
|
|
|
|
return self::set((new $class())->parse($config), $name, $range); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function load($file, $name = '', $range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
if (!isset(self::$config[$range])) self::$config[$range] = []; |
|
|
|
|
|
if (is_file($file)) { |
|
|
$name = strtolower($name); |
|
|
$type = pathinfo($file, PATHINFO_EXTENSION); |
|
|
|
|
|
if ('php' == $type) { |
|
|
return self::set(include $file, $name, $range); |
|
|
} |
|
|
|
|
|
if ('yaml' == $type && function_exists('yaml_parse_file')) { |
|
|
return self::set(yaml_parse_file($file), $name, $range); |
|
|
} |
|
|
|
|
|
return self::parse($file, $type, $name, $range); |
|
|
} |
|
|
|
|
|
return self::$config[$range]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function has($name, $range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
if (!strpos($name, '.')) { |
|
|
return isset(self::$config[$range][strtolower($name)]); |
|
|
} |
|
|
|
|
|
|
|
|
$name = explode('.', $name, 2); |
|
|
return isset(self::$config[$range][strtolower($name[0])][$name[1]]); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function get($name = null, $range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
|
|
|
if (empty($name) && isset(self::$config[$range])) { |
|
|
return self::$config[$range]; |
|
|
} |
|
|
|
|
|
|
|
|
if (!strpos($name, '.')) { |
|
|
$name = strtolower($name); |
|
|
return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null; |
|
|
} |
|
|
|
|
|
|
|
|
$name = explode('.', $name, 2); |
|
|
$name[0] = strtolower($name[0]); |
|
|
|
|
|
if (!isset(self::$config[$range][$name[0]])) { |
|
|
|
|
|
$module = Request::instance()->module(); |
|
|
$file = CONF_PATH . ($module ? $module . DS : '') . 'extra' . DS . $name[0] . CONF_EXT; |
|
|
|
|
|
is_file($file) && self::load($file, $name[0]); |
|
|
} |
|
|
|
|
|
return isset(self::$config[$range][$name[0]][$name[1]]) ? |
|
|
self::$config[$range][$name[0]][$name[1]] : |
|
|
null; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function set($name, $value = null, $range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
if (!isset(self::$config[$range])) self::$config[$range] = []; |
|
|
|
|
|
|
|
|
if (is_string($name)) { |
|
|
if (!strpos($name, '.')) { |
|
|
self::$config[$range][strtolower($name)] = $value; |
|
|
} else { |
|
|
|
|
|
$name = explode('.', $name, 2); |
|
|
self::$config[$range][strtolower($name[0])][$name[1]] = $value; |
|
|
} |
|
|
|
|
|
return $value; |
|
|
} |
|
|
|
|
|
|
|
|
if (is_array($name)) { |
|
|
if (!empty($value)) { |
|
|
self::$config[$range][$value] = isset(self::$config[$range][$value]) ? |
|
|
array_merge(self::$config[$range][$value], $name) : |
|
|
$name; |
|
|
|
|
|
return self::$config[$range][$value]; |
|
|
} |
|
|
|
|
|
return self::$config[$range] = array_merge( |
|
|
self::$config[$range], array_change_key_case($name) |
|
|
); |
|
|
} |
|
|
|
|
|
|
|
|
return self::$config[$range]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function reset($range = '') |
|
|
{ |
|
|
$range = $range ?: self::$range; |
|
|
|
|
|
if (true === $range) { |
|
|
self::$config = []; |
|
|
} else { |
|
|
self::$config[$range] = []; |
|
|
} |
|
|
} |
|
|
} |
|
|
|