tp5 框架執行流程 初始化應用(五)

2021-09-25 10:21:29 字數 4044 閱讀 9667

// 執行應用並響應
2、 在 run 方法中,第一步執行初始化應用     $this->initialize() 方法

if ($this->initialized) 

$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();

1、定義一些初始化的成員變數

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...