mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-01 12:42:48 +08:00
更新核心文件
This commit is contained in:
90
base.php
90
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 缓存名称,如果为数组表示进行缓存设置
|
||||
|
||||
73
convention.php
Normal file
73
convention.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'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' => '', // 指定从服务器序号
|
||||
],
|
||||
];
|
||||
@@ -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);
|
||||
|
||||
// 系统默认的特殊变量替换
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
@@ -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('?><?php','',$content);
|
||||
// 模板过滤输出
|
||||
$replace = $this->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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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' => [
|
||||
|
||||
@@ -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']);
|
||||
}
|
||||
|
||||
// 执行应用
|
||||
|
||||
Reference in New Issue
Block a user