From aa123aa8a24dcf474df601a808c8f2a909e66869 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 26 Mar 2015 16:15:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A0=B8=E5=BF=83=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base.php | 90 +++++++++++++++++++-------- convention.php | 73 ++++++++++++++++++++++ library/behavior/content_replace.php | 4 +- library/think/app.php | 93 +++++++++++++--------------- library/think/config.php | 23 ++++--- library/think/error.php | 2 +- library/think/hook.php | 6 +- library/think/template.php | 24 ++++--- library/think/url.php | 4 +- mode/common.php | 72 +-------------------- start.php | 8 +-- 11 files changed, 221 insertions(+), 178 deletions(-) create mode 100644 convention.php diff --git a/base.php b/base.php index bdff5650..d4246438 100644 --- a/base.php +++ b/base.php @@ -12,28 +12,28 @@ // 版本信息 define('THINK_VERSION', '4.0beta'); // 系统常量 -defined('THINK_PATH') || define('THINK_PATH', dirname(__FILE__).'/'); -defined('LIB_PATH') || define('LIB_PATH', THINK_PATH.'library/'); -defined('MODE_PATH') || define('MODE_PATH', THINK_PATH.'mode/'); // 系统应用模式目录 -defined('TRAIT_PATH') || define('TRAIT_PATH', THINK_PATH.'traits/'); -defined('CORE_PATH') || define('CORE_PATH', LIB_PATH.'think/'); -defined('ORG_PATH') || define('ORG_PATH', LIB_PATH.'org/'); -defined('APP_PATH') || define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'); -defined('RUNTIME_PATH') || define('RUNTIME_PATH', realpath(APP_PATH).'/runtime/'); -defined('DATA_PATH') || define('DATA_PATH', RUNTIME_PATH.'data/'); -defined('LOG_PATH') || define('LOG_PATH', RUNTIME_PATH.'log/'); -defined('CACHE_PATH') || define('CACHE_PATH', RUNTIME_PATH.'cache/'); -defined('TEMP_PATH') || define('TEMP_PATH', RUNTIME_PATH.'temp/'); -defined('VENDOR_PATH') || define('VENDOR_PATH', THINK_PATH.'vendor/'); -defined('EXT') || define('EXT', '.php'); -defined('MODEL_LAYER') || define('MODEL_LAYER', 'model'); -defined('VIEW_LAYER') || define('VIEW_LAYER', 'view'); -defined('CONTROLLER_LAYER') || define('CONTROLLER_LAYER', 'controller'); -defined('APP_DEBUG') || define('APP_DEBUG', false); // 是否调试模式 -defined('ENV_PREFIX') || define('ENV_PREFIX', 'T_'); // 环境变量的配置前缀 +defined('THINK_PATH') OR define('THINK_PATH', dirname(__FILE__).'/'); +defined('LIB_PATH') OR define('LIB_PATH', THINK_PATH.'library/'); +defined('MODE_PATH') OR define('MODE_PATH', THINK_PATH.'mode/'); // 系统应用模式目录 +defined('TRAIT_PATH') OR define('TRAIT_PATH', THINK_PATH.'traits/'); +defined('CORE_PATH') OR define('CORE_PATH', LIB_PATH.'think/'); +defined('ORG_PATH') OR define('ORG_PATH', LIB_PATH.'org/'); +defined('APP_PATH') OR define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'); +defined('RUNTIME_PATH') OR define('RUNTIME_PATH', realpath(APP_PATH).'/runtime/'); +defined('DATA_PATH') OR define('DATA_PATH', RUNTIME_PATH.'data/'); +defined('LOG_PATH') OR define('LOG_PATH', RUNTIME_PATH.'log/'); +defined('CACHE_PATH') OR define('CACHE_PATH', RUNTIME_PATH.'cache/'); +defined('TEMP_PATH') OR define('TEMP_PATH', RUNTIME_PATH.'temp/'); +defined('VENDOR_PATH') OR define('VENDOR_PATH', THINK_PATH.'vendor/'); +defined('EXT') OR define('EXT', '.php'); +defined('MODEL_LAYER') OR define('MODEL_LAYER', 'model'); +defined('VIEW_LAYER') OR define('VIEW_LAYER', 'view'); +defined('CONTROLLER_LAYER') OR define('CONTROLLER_LAYER', 'controller'); +defined('APP_DEBUG') OR define('APP_DEBUG', false); // 是否调试模式 +defined('ENV_PREFIX') OR define('ENV_PREFIX', 'T_'); // 环境变量的配置前缀 // 应用模式 默认为普通模式 -defined('APP_MODE') || define('APP_MODE', function_exists('saeAutoLoader') ? 'sae' : 'common'); +defined('APP_MODE') OR define('APP_MODE', function_exists('saeAutoLoader') ? 'sae' : 'common'); // 环境常量 define('MEMORY_LIMIT_ON', function_exists('memory_get_usage')); @@ -54,8 +54,12 @@ function L($name){ } // 获取配置参数 -function C($name='',$range='') { - return think\Config::get($name,$range); +function C($name='',$value=null,$range='') { + if(is_null($value)){ + return think\Config::get($name,$range); + }else{ + think\Config::set($name,$value,$range); + } } // 获取输入数据 支持默认值和过滤 @@ -76,11 +80,11 @@ function I($key,$default='',$filter='') { * @return mixed */ function G($start,$end='',$dec=6) { - if(''==$end){ - think\Debug::remark($start); - }else{ - return 'm'==$dec ? think\Debug::getUseMem($start,$end) : think\Debug::getUseTime($start,$end,$dec); - } + if(''==$end){ + think\Debug::remark($start); + }else{ + return 'm'==$dec ? think\Debug::getUseMem($start,$end) : think\Debug::getUseTime($start,$end,$dec); + } } /** @@ -197,6 +201,38 @@ function W($name, $data=[]) { return think\Loader::action($name,$data,'Widget'); } +function U($url,$vars='',$suffix=true,$domain=false){ + return think\Url::build($url,$vars,$suffix,$domain); +} + +function session($name,$value=''){ + if(is_array($name)){// 初始化 + think\Session::init($name); + }elseif(is_null($name)){ // 清除 + think\Session::clear($value); + }elseif('' === $value){ // 获取 + return think\Session::get($name); + }elseif(is_null($value)){ // 删除session + return think\Session::delete($name); + }else{ // 设置session + think\Session::set($name,$value); + } +} + +function cookie($name,$value=''){ + if(is_array($name)){// 初始化 + think\Cookie::init($name); + }elseif(is_null($name)){ // 清除 + think\Cookie::clear($value); + }elseif('' === $value){ // 获取 + return think\Cookie::get($name); + }elseif(is_null($value)){ // 删除session + return think\Cookie::delete($name); + }else{ // 设置session + think\Cookie::set($name,$value); + } +} + /** * 缓存管理 * @param mixed $name 缓存名称,如果为数组表示进行缓存设置 diff --git a/convention.php b/convention.php new file mode 100644 index 00000000..d265ac37 --- /dev/null +++ b/convention.php @@ -0,0 +1,73 @@ + true, // 调试模式 + 'app_status' => 'debug',// 应用模式状态 + 'var_module' => 'm', // 模块变量名 + 'var_controller' => 'c', // 控制器变量名 + 'var_action' => 'a', // 操作变量名 + 'var_pathinfo' => 's', // PATHINFO变量名 用于兼容模式 + 'pathinfo_fetch' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', + 'pathinfo_depr' => '/', // pathinfo分隔符 + 'require_module' => true, // 是否显示模块 + 'default_module' => 'index', // 默认模块名 + 'default_controller' => 'index', // 默认控制器名 + 'default_action' => 'index', // 默认操作名 + 'action_suffix' => '', // 操作方法后缀 + 'url_model' => 1, // URL模式 + 'base_url' => $_SERVER["SCRIPT_NAME"], // 基础URL路径 + 'url_html_suffix' => '.html', + 'url_params_bind' => false, // url变量绑定 + 'exception_tmpl' => THINK_PATH.'Tpl/think_exception.tpl',// 异常页面的模板文件 + 'error_tmpl' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件 + 'success_tmpl' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件 + 'default_ajax_return' => 'JSON', // 默认AJAX 数据返回格式,可选JSON XML ... + 'default_jsonp_handler' => 'jsonpReturn', // 默认JSONP格式返回的处理方法 + 'var_jsonp_handler' => 'callback', + 'template_engine' => 'think', + 'common_module' => 'Common', + 'action_bind_class' => false, + 'url_module_map' => [], + + /* 错误设置 */ + 'error_message' => '页面错误!请稍后再试~',//错误显示信息,非调试模式有效 + 'error_page' => '', // 错误定向页面 + 'show_error_msg' => false, // 显示错误信息 + + 'log' => [ + 'type' => 'File', + 'path' => LOG_PATH, + ], + + 'cache' => [ + 'type' => 'File', + 'path' => CACHE_PATH, + 'prefix' => '', + 'expire' => 0, + ], + + 'session' => [ + 'prefix' => 'think', + 'type' => '', + 'auto_start' => true, + ], + + /* 数据库设置 */ + 'database' => [ + 'type' => 'mysql', // 数据库类型 + 'dsn' => '', // + 'hostname' => 'localhost', // 服务器地址 + 'database' => '', // 数据库名 + 'username' => 'root', // 用户名 + 'password' => '', // 密码 + 'hostport' => '', // 端口 + 'params' => [], // 数据库连接参数 + 'charset' => 'utf8', // 数据库编码默认采用utf8 + 'prefix' => '', // 数据库表前缀 + 'debug' => false, // 数据库调试模式 + 'deploy' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'rw_separate' => false, // 数据库读写是否分离 主从式有效 + 'master_num' => 1, // 读写分离后 主服务器数量 + 'slave_no' => '', // 指定从服务器序号 + ], +]; \ No newline at end of file diff --git a/library/behavior/content_replace.php b/library/behavior/content_replace.php index a8bba806..33058557 100644 --- a/library/behavior/content_replace.php +++ b/library/behavior/content_replace.php @@ -37,8 +37,8 @@ class ContentReplace { $script_name = rtrim($_SERVER['SCRIPT_NAME'],'/'); } define('ROOT_URL', rtrim(dirname(str_replace("\\","\/",$script_name)),'/')); - define('MODULE_URL', ROOT_URL.(Config::get('require_module')?'/'.(defined('MODULE_ALIAS')?MODULE_ALIAS:MODULE_NAME):'')); - define('CONTROLLER_URL', MODULE_URL.(Config::get('require_controller')?'/'.CONTROLLER_NAME:'')); + define('MODULE_URL', ROOT_URL.'/'.(defined('MODULE_ALIAS')?MODULE_ALIAS:MODULE_NAME); + define('CONTROLLER_URL', MODULE_URL.'/'.CONTROLLER_NAME; define('ACTION_URL', CONTROLLER_URL.'/'.ACTION_NAME); // 系统默认的特殊变量替换 diff --git a/library/think/app.php b/library/think/app.php index dfb66a62..485d8f7d 100644 --- a/library/think/app.php +++ b/library/think/app.php @@ -32,7 +32,7 @@ class App { Cache::connect($config['cache']); // 加载框架底层语言包 - is_file(THINK_PATH.'Lang/'.strtolower(Config::get('default_lang')).EXT) && Lang::set(include THINK_PATH.'Lang/'.strtolower(Config::get('default_lang')).EXT); + is_file(THINK_PATH.'Lang/'.strtolower($config['default_lang']).EXT) AND Lang::set(include THINK_PATH.'Lang/'.strtolower($config['default_lang']).EXT); // 启动session if(!IS_CLI) { @@ -45,27 +45,8 @@ class App { Hook::listen('app_init'); define('COMMON_PATH', APP_PATH . $config['common_module'].'/'); - // 加载全局初始化文件 - if(is_file( COMMON_PATH . 'init' . EXT )) { - include COMMON_PATH . 'init' . EXT; - }else{ - // 检测全局配置文件 - if(is_file(COMMON_PATH . 'config' . EXT)) { - $config = Config::set(include COMMON_PATH . 'config' . EXT); - } - // 加载全局别名文件 - if(is_file(COMMON_PATH . 'alias' . EXT)) { - Loader::addMap(include COMMON_PATH . 'alias' . EXT); - } - // 加载全局公共文件 - if(is_file( COMMON_PATH . 'common' . EXT)) { - include COMMON_PATH . 'common' . EXT; - } - if(is_file(COMMON_PATH . 'tags' . EXT)) { - // 全局行为扩展文件 - Hook::import(include COMMON_PATH . 'tags' . EXT); - } - } + // 初始化公共模块 + self::initModule(COMMON_PATH,$config); // 应用URL调度 self::dispatch($config); @@ -168,6 +149,39 @@ class App { return ; } + /** + * 初始化模块 + * @access private + * @return void + */ + static private function initModule($path,&$config){ + // 加载初始化文件 + if(is_file( $path . 'init' . EXT )) { + include $path . 'init' . EXT; + }else{ + // 检测配置文件 + if(is_file($path . 'config' . EXT)) { + $config = Config::set(include $path . 'config' . EXT); + } + // 加载应用状态配置文件 + if($config['app_status'] && is_file($path . $config['app_status'] . EXT)) { + $config = Config::set(include $path . $config['app_status'] . EXT); + } + // 加载别名文件 + if(is_file($path . 'alias' . EXT)) { + Loader::addMap(include $path . 'alias' . EXT); + } + // 加载公共文件 + if(is_file( $path . 'common' . EXT)) { + include $path . 'common' . EXT; + } + // 加载行为扩展文件 + if(is_file($path . 'tags' . EXT)) { + Hook::import(include $path . 'tags' . EXT); + } + } + } + /** * URL调度 * @access public @@ -208,7 +222,8 @@ class App { define('__INFO__',''); define('__EXT__',''); }else{ - define('__INFO__',trim($_SERVER['PATH_INFO'],'/')); + $_SERVER['PATH_INFO'] = trim($_SERVER['PATH_INFO'],'/'); + define('__INFO__',$_SERVER['PATH_INFO']); // URL后缀 define('__EXT__', strtolower(pathinfo($_SERVER['PATH_INFO'],PATHINFO_EXTENSION))); $_SERVER['PATH_INFO'] = __INFO__; @@ -222,7 +237,9 @@ class App { $_GET[$config['var_module']] = array_shift($paths); $_SERVER['PATH_INFO'] = implode('/', $paths); } - } + } + // 去除URL后缀 + $_SERVER['PATH_INFO'] = preg_replace($config['url_html_suffix']? '/\.('.trim($config['url_html_suffix'],'.').')$/i' : '/\.'.__EXT__.'$/i', '', $_SERVER['PATH_INFO']); } // 获取模块名称 @@ -234,32 +251,8 @@ class App { define('MODULE_PATH', APP_PATH . MODULE_NAME . '/'); define('VIEW_PATH', MODULE_PATH.VIEW_LAYER.'/'); - // 加载模块初始化文件 - if(is_file( MODULE_PATH . 'init' . EXT )) { - include MODULE_PATH . 'init' . EXT; - $config = Config::get(); - }else{ - // 检测项目(或模块)配置文件 - if(is_file(MODULE_PATH . 'config' . EXT)) { - $config = Config::set(include MODULE_PATH . 'config' . EXT); - } - if($config['app_status'] && is_file(MODULE_PATH . $config['app_status'] . EXT)) { - // 加载对应的项目配置文件 - $config = Config::set(include MODULE_PATH . $config['app_status'] . EXT); - } - // 加载别名文件 - if(is_file(MODULE_PATH . 'alias' . EXT)) { - Loader::addMap(include MODULE_PATH . 'alias' . EXT); - } - // 加载公共文件 - if(is_file( MODULE_PATH . 'common' . EXT)) { - include MODULE_PATH . 'common' . EXT; - } - if(is_file(MODULE_PATH . 'tags' . EXT)) { - // 行为扩展文件 - Hook::import(include MODULE_PATH . 'tags' . EXT); - } - } + // 初始化模块 + self::initModule(MODULE_PATH,$config); }else{ throw new Exception('module not exists :' . MODULE_NAME); } diff --git a/library/think/config.php b/library/think/config.php index e574fe8c..85e4d4ea 100644 --- a/library/think/config.php +++ b/library/think/config.php @@ -13,7 +13,7 @@ namespace think; class Config { static private $config = []; // 配置参数 - static private $range = '_sys_'; // 参数作用域 + static private $range = '_sys_'; // 参数作用域 // 设定配置参数的作用域 static public function range($range){ @@ -57,18 +57,18 @@ class Config { } $name = strtolower($name); if (!strpos($name, '.')) { - // 判断环境变量 - if(isset($_ENV[ENV_PREFIX.$name])){ - return $_ENV[ENV_PREFIX.$name]; - } + // 判断环境变量 + if(isset($_ENV[ENV_PREFIX.$name])){ + return $_ENV[ENV_PREFIX.$name]; + } return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null; }else{ // 二维数组设置和获取支持 $name = explode('.', $name); - // 判断环境变量 - if(isset($_ENV[ENV_PREFIX.$name[0].'_'.$name[1]])){ - return $_ENV[ENV_PREFIX.$name[0].'_'.$name[1]]; - } + // 判断环境变量 + if(isset($_ENV[ENV_PREFIX.$name[0].'_'.$name[1]])){ + return $_ENV[ENV_PREFIX.$name[0].'_'.$name[1]]; + } return isset(self::$config[$range][$name[0]][$name[1]]) ? self::$config[$range][$name[0]][$name[1]] : null; } } @@ -97,4 +97,9 @@ class Config { return null; // 避免非法参数 } } + + // 获取某个作用域的配置列表 + static public function getRange($rang){ + return isset(self::$config[$range]) ? self::$config[$range] : null; + } } diff --git a/library/think/error.php b/library/think/error.php index 65c6cad1..0c93ce65 100644 --- a/library/think/error.php +++ b/library/think/error.php @@ -96,7 +96,7 @@ class Error { static public function halt($error) { IS_CLI && exit(is_array($error)?$error['message']:$error); $e = []; - if (Config::get('app_debug')) { + if (APP_DEBUG) { //调试模式下输出错误信息 if (!is_array($error)) { $trace = debug_backtrace(); diff --git a/library/think/hook.php b/library/think/hook.php index 8129fcbb..c9c84a4e 100644 --- a/library/think/hook.php +++ b/library/think/hook.php @@ -48,11 +48,13 @@ class Hook { if(isset(self::$tags[$tag])) { foreach (self::$tags[$tag] as $name) { - Config::get('app_debug') && Debug::remark('behavior_start','time'); + if(APP_DEBUG){ + Debug::remark('behavior_start','time'); + } $result = self::exec($name, $tag,$params); - if(Config::get('app_debug')){ + if(APP_DEBUG){ Debug::remark('behavior_end','time'); Log::record('Run '.$name.' [ RunTime:'.Debug::getUseTime('behavior_start','behavior_end').'s ]','INFO'); } diff --git a/library/think/template.php b/library/think/template.php index 6de0cfc0..9daff0b1 100644 --- a/library/think/template.php +++ b/library/think/template.php @@ -22,16 +22,16 @@ class Template { 'tpl_path' => VIEW_PATH, // 模板路径 'tpl_suffix' => '.html', // 默认模板文件后缀 'cache_suffix' => '.php', // 默认模板缓存后缀 - 'tpl_deny_func_list' => 'echo,exit', // 模板引擎禁用函数 + 'tpl_deny_func_list' => 'echo,exit', // 模板引擎禁用函数 'tpl_deny_php' => false, // 默认模板引擎是否禁用PHP原生代码 'tpl_begin' => '{', // 模板引擎普通标签开始标记 'tpl_end' => '}', // 模板引擎普通标签结束标记 - 'strip_space' => false, // 是否去除模板文件里面的html空格与换行 - 'tpl_cache' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译 - 'compile_type' => 'file', // 模板编译类型 + 'strip_space' => false, // 是否去除模板文件里面的html空格与换行 + 'tpl_cache' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译 + 'compile_type' => 'file', // 模板编译类型 'cache_path' => CACHE_PATH, // 模板缓存目录 'cache_prefix' => '', // 模板缓存前缀标识,可以动态改变 - 'cache_time' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒) + 'cache_time' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒) 'layout_item' => '{__CONTENT__}', // 布局模板的内容替换标识 'taglib_begin' => '<', // 标签库标签开始标记 'taglib_end' => '>', // 标签库标签结束标记 @@ -39,6 +39,7 @@ class Template { 'taglib_build_in' => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序 'taglib_pre_load' => '', // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔 'display_cache' => false, // 模板渲染缓存 + 'tpl_replace_string' => [], ]; private $literal = []; @@ -210,6 +211,9 @@ class Template { } // 优化生成的php代码 $content = str_replace('?>config['tpl_replace_string']; + $content = str_replace(array_keys($replace),array_values($replace),$content); // 编译存储 $this->storage->write($cacheFile,$content); return ; @@ -453,6 +457,7 @@ class Template { $end = $this->config['taglib_end']; $className = '\\think\\template\\taglib\\'.strtolower($tagLib); $tLib = new $className($this); + //$that = $this; foreach ($tLib->getTags() as $name=>$val){ $tags = [$name]; if(isset($val['alias'])) {// 别名设置 @@ -470,14 +475,14 @@ class Template { $n1 = empty($val['attr'])?'(\s*?)':'\s([^'.$end.']*)'; if (!$closeTag){ $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is'; - $content = preg_replace_callback($patterns, function($matches){ - return $this->parseXmlTag($tLib, $tagLib, $tag, $matches[0], $matches[1]); + $content = preg_replace_callback($patterns, function($matches) use($tLib,$tagLib,$tag){ + return $this->parseXmlTag($tLib, $tagLib, $tag, $matches[1], $matches[2]); }, $content); }else{ $patterns = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/is'; for($i=0;$i<$level;$i++){ - $content = preg_replace_callback($patterns, function($matches){ - return $this->parseXmlTag($tLib, $tagLib, $tag, $matches[0], $matches[1]); + $content = preg_replace_callback($patterns, function($matches) use($tLib,$tagLib,$tag){ + return $this->parseXmlTag($tLib, $tagLib, $tag, $matches[1], $matches[2]); }, $content); } } @@ -504,7 +509,6 @@ class Template { $parse = '_'.$tag; $content = trim($content); $tags = $tLib->parseXmlAttr($attr,$tag); - $tLib->tpl = $this; return $tLib->$parse($tags,$content); } diff --git a/library/think/url.php b/library/think/url.php index b9caddfe..72e504a8 100644 --- a/library/think/url.php +++ b/library/think/url.php @@ -91,10 +91,10 @@ class Url { $path = explode($depr,$url); $var = []; $var[Config::get('var_action')] = !empty($path)?array_pop($path):ACTION_NAME; - if(Config::get('require_controller')) { + if(!defined('BIND_CONTROLLER')){ $var[Config::get('var_controller')] = !empty($path)?array_pop($path):CONTROLLER_NAME; } - if(Config::get('require_module')) { + if(!defined('BIND_MODULE')){ $var[Config::get('var_module')] = !empty($path)?array_pop($path):MODULE_NAME; } } diff --git a/mode/common.php b/mode/common.php index 43ed6719..ec35736e 100644 --- a/mode/common.php +++ b/mode/common.php @@ -15,77 +15,7 @@ return [ // 配置文件 - 'config' => [ - 'app_debug' => true, // 调试模式 - 'app_status' => 'debug',// 应用模式状态 - 'var_module' => 'm', // 模块变量名 - 'var_controller' => 'c', // 控制器变量名 - 'var_action' => 'a', // 操作变量名 - 'var_pathinfo' => 's', // PATHINFO变量名 用于兼容模式 - 'pathinfo_fetch' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', - 'pathinfo_depr' => '/', // pathinfo分隔符 - 'require_module' => true, // 是否显示模块 - 'default_module' => 'index', // 默认模块名 - 'default_controller' => 'index', // 默认控制器名 - 'default_action' => 'index', // 默认操作名 - 'action_suffix' => '', // 操作方法后缀 - 'url_model' => 1, // URL模式 - 'base_url' => $_SERVER["SCRIPT_NAME"], // 基础URL路径 - 'url_html_suffix' => '.html', - 'url_params_bind' => false, // url变量绑定 - 'exception_tmpl' => THINK_PATH.'Tpl/think_exception.tpl',// 异常页面的模板文件 - 'error_tmpl' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件 - 'success_tmpl' => THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件 - 'default_ajax_return' => 'JSON', // 默认AJAX 数据返回格式,可选JSON XML ... - 'default_jsonp_handler' => 'jsonpReturn', // 默认JSONP格式返回的处理方法 - 'var_jsonp_handler' => 'callback', - 'template_engine' => 'think', - 'common_module' => 'Common', - 'action_bind_class' => false, - 'url_module_map' => [], - - /* 错误设置 */ - 'error_message' => '页面错误!请稍后再试~',//错误显示信息,非调试模式有效 - 'error_page' => '', // 错误定向页面 - 'show_error_msg' => false, // 显示错误信息 - - 'log' => [ - 'type' => 'File', - 'path' => LOG_PATH, - ], - - 'cache' => [ - 'type' => 'File', - 'path' => CACHE_PATH, - 'prefix' => '', - 'expire' => 0, - ], - - 'session' => [ - 'prefix' => 'think', - 'type' => '', - 'auto_start' => true, - ], - - /* 数据库设置 */ - 'database' => [ - 'type' => 'mysql', // 数据库类型 - 'dsn' => '', // - 'hostname' => 'localhost', // 服务器地址 - 'database' => '', // 数据库名 - 'username' => 'root', // 用户名 - 'password' => '', // 密码 - 'hostport' => '', // 端口 - 'params' => [], // 数据库连接参数 - 'charset' => 'utf8', // 数据库编码默认采用utf8 - 'prefix' => '', // 数据库表前缀 - 'debug' => false, // 数据库调试模式 - 'deploy' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) - 'rw_separate' => false, // 数据库读写是否分离 主从式有效 - 'master_num' => 1, // 读写分离后 主服务器数量 - 'slave_no' => '', // 指定从服务器序号 - ], - ], + 'config' => THINK_PATH.'convention'.EXT, // 别名定义 'alias' => [ diff --git a/start.php b/start.php index b0ef56b8..5245c31e 100644 --- a/start.php +++ b/start.php @@ -28,21 +28,21 @@ set_error_handler(['think\Error','appError']); set_exception_handler(['think\Error','appException']); // 加载模式定义文件 -$mode = require MODE_PATH.APP_MODE.EXT; +$mode = require MODE_PATH.APP_MODE.EXT; // 加载模式别名定义 if(isset($mode['alias'])){ - Loader::addMap(is_array($mode['alias']) ? $mode['alias'] : include $mode['alias']); + Loader::addMap(is_array($mode['alias']) ? $mode['alias'] : include $mode['alias']); } // 加载模式配置文件 if(isset($mode['config'])){ - is_array($mode['config']) ? Config::set($mode['config']) : Config::load($mode['config']); + is_array($mode['config']) ? Config::set($mode['config']) : Config::load($mode['config']); } // 加载模式行为定义 if(isset($mode['tags'])) { - Hook::import(is_array($mode['tags']) ? $mode['tags'] : include $mode['tags']); + Hook::import(is_array($mode['tags']) ? $mode['tags'] : include $mode['tags']); } // 执行应用