// 執行應用並響應
2、 在 run 方法中,第一步執行初始化應用 $this->initialize() 方法
if ($this->initialized)1、定義一些初始化的成員變數$this->initialized = true;
$this->begintime = microtime(true);
$this->beginmem = memory_get_usage();
$this->runtimepath = $this->rootpath . 'runtime' . directory_separator;
$this->routepath = $this->rootpath . 'route' . directory_separator;
$this->configpath = $this->rootpath . 'config' . directory_separator;
static::setinstance($this);
// 載入環境變數配置檔案
if (is_file($this->rootpath . '.env'))
$this->configext = $this->env->get('config_ext', '.php');
// 載入慣例配置檔案
$this->config->set(include $this->thinkpath . 'convention.php');
// 設定路徑環境變數
$this->env->set([
'think_path' => $this->thinkpath,
'root_path' => $this->rootpath,
'config_path' => $this->configpath,
'route_path' => $this->routepath,
'runtime_path' => $this->runtimepath,
'extend_path' => $this->rootpath . 'extend' . directory_separator,
'vendor_path' => $this->rootpath . 'vendor' . directory_separator,
]);// 註冊應用命名空間
// 初始化應用
$this->init();
// 開啟類名字尾
// 應用除錯模式
ini_set('display_errors', 'off');
} elseif (php_sapi != 'cli')
ob_start();
if (!empty($output))
}// 註冊異常處理類
}// 註冊根命名空間
}// 載入composer autofile檔案
loader::loadcomposerautoloadfiles();
// 註冊類庫別名
loader::addclassalias($this->config->pull('alias'));
// 資料庫配置初始化
db::init($this->config->pull('database'));
// 設定系統統時區
// 讀取語言包
$this->loadlangpack();
// 路由初始化
$this->routeinit();
2、載入環境變數配置檔案。
3、載入慣例配置檔案。
4、設定路徑環境變數
5、註冊應用命名空間
6、初始化應用
。。。 這裡就不一一列出來了,一看就懂
這裡重點看的 初始化應用 init 方法
public function init($module = '')
elseif (is_file($this->runtimepath . $module . 'init.php')) else
}// 載入公共檔案
if (is_file($path . 'common.php'))
if ('' == $module)
// 載入中介軟體
if (is_file($path . 'middleware.php'))
}// 註冊服務的容器物件例項
if (is_file($path . 'provider.php'))
}// 自動讀取配置檔案
if (is_dir($path . 'config')) elseif (is_dir($this->configpath . $module))
$files = isset($dir) ? scandir($dir) : ;
foreach ($files as $file) }}
$this->setmodulepath($path);
if ($module)
}
3、載入初始化檔案 init.php ,預設是沒有的,最後會走到最終的 else ,會載入以下檔案
tages.php,common.php, help.php, provider.php,以及最後會載入定位目錄下的 config 配置檔案
4、設定模組路徑
$this->setmodulepath($path);
5、如果 module 存在執行 對容器中的物件例項進行配置更新
if ($module)
6、對容器中的物件實列進行配置更新
protected function containerconfigupdate($module)
db::init($config['database']);
$this->middleware->setconfig($config['middleware']);
$this->cookie->init($config['cookie']);
$this->view->init($config['template']);
$this->log->init($config['log']);
$this->session->setconfig($config['session']);
$this->debug->setconfig($config['trace']);
$this->cache->init($config['cache'], true);
// 載入當前模組語言包
// 模組請求快取檢查
$this->checkrequestcache();}
7、剩下的主要介紹一下 路由初始化方法 $this->routeinit();
/**
* 路由初始化 匯入路由定義規則
* @access public
* @return void
*/public function routeinit()}}
if ($this->route->config('route_annotation'))
$filename = $this->runtimepath . 'build_route.php';
if (is_file($filename)) }}
主要分為兩個部分:
第乙個部分是匯入載入 route檔案中的所有路由配置
第二個部分是生成註解路由,通過反射機制獲取類中定義的路由規則,最後在 runtimepath 生成乙個 build_route.php檔案。
tp5的執行流程
一 入口檔案 c wamp64 www tp5 public index.php 作用 1 定義目錄常量 2 載入框架引導目錄 二 載入框架的引導檔案 c wamp64 www tp5 thinkphp start.php 作用 引導基礎檔案 對應用進行運轉 三 載入框架的基礎引導檔案 c wamp...
tp5類的屬性不存在 TP5 模型初始化
前言 先交代下背景,在乙個專案中,有乙個資料表有水平分表的需求。當時想找到一種方法,把對資料庫的操作,寫到乙個模型裡,通過去換模型屬性中的table來達到 不變操作的資料表變化的效果。我們都知道,模型要想關聯資料表的話,有兩中方式,第一種就是將模型名和資料表一致。這樣模型就會預設關聯到名字對應的資料...
tp5 控制器初始化與前置操作
如果你的控制器類繼承了 think controller類的話,可以定義控制器初始化方法 initialize,在該控制器的方法呼叫前首先執行。use think controller class index extends controller public function world publ...