Yii2應用的執行過程

2022-02-05 02:46:37 字數 1700 閱讀 8392

每乙個框架都有乙個入口指令碼,yii2也不例外。一般來說,對於web應用的入口指令碼是yiibasepath/frontend/web目錄下的index.php。

先觀察這個檔案:

<?php

defined('yii_debug') or define('yii_debug', true);

defined('yii_env') or define('yii_env', 'dev');

require__dir__.'/../../vendor/autoload.php';

require__dir__.'/../../vendor/yiisoft/yii2/yii.php';

require__dir__.'/../../common/config/bootstrap.php';

require__dir__.'/../config/bootstrap.php';

$config=yii\helpers\arrayhelper::merge(

require__dir__.'/../../common/config/main.php',

require__dir__.'/../../common/config/main-local.php',

require__dir__.'/../config/main.php',

require__dir__.'/../config/main-local.php'

);

具體執行過程我們從run()方法入手來一點點剝洋蔥。

<?php

//public

function

run()

catch(exitexception $e

) }

<?php

//publicfunction__construct(

$config =)

<?php

//public

function preinit(&$config) //

這是乙個引用型別的形參,不用複製$config資料

if (isset($config['basepath']))

else

if (isset($config['vendorpath']))

else

if (isset($config['runtimepath']))

else

if (isset($config['timezone']))

elseif (!ini_get('date.timezone'))

if (isset($config['container']))

//merge core components with custom components

foreach($this->corecomponents() as

$id => $component)

elseif (is_array($config['components'][$id]) && !isset($config['components'][$id]['class']))

}}

不難發現,它總共設定了7個屬性,分別是應用id,應用basepah,三方元件目錄,runtime目錄,時區,服務容器,自定義元件合併(元件)。

關於後初始化的內容介紹在我的另一篇博文,《yii2應用的初始化》。

YII2 執行概述 Overview

每一次 yii 應用開始處理 http 請求時,它都會進行乙個近似的流程。使用者提交指向 入口指令碼web index.php的請求。應用會通過 request 請求 應用元件解析被請求的 路由。應用建立乙個 controller 控制器 例項具體處理請求。控制器會建立乙個 action 動作 例項...

Yii2 建立多應用

yii2.0的高階應用模板包括三個預設的應用模板 在frontend同目錄新建乙個名為weixin資料夾.把frontend目錄下面的東西全拷貝到weixin目錄裡面 修改web目錄index.php的包含路徑,還有config main.php的包含路徑 修改config main.php配置項c...

Yii2 應用結構之模組

定義的模組 namespace useyii class module extends yii base module 應用模組 配置模組 modules article 訪問模組 獲取模組的例項 var dump module id 獲取模組的id 獲取id為 article 的模組 var du...