Yii應用的目錄結構
├── backend
├── common
├── console
├── environments
├── frontend
├── nbproject
├── tests
├── vendor
├── composer.json
├── composer.lock
├── init
├── init.bat
├── LICENSE.md
├── README.md
├── requirements.php
├── yii
└── yii.bat
公共目錄
├── config:通用的配置,這些配置將作用于前后臺和命令行
├── mail:應用的前后臺和命令行的與郵件相關的布局文件等
└── models:前后臺和命令行都可能用到的數據模型
前臺的目錄結構
├── assets:前端資源包PHP類
├── config:本應用的配置文件
├── controllers:控制器類
├── models:數據模型類
├── runtime:涉及到寫入臨時文件等
├── views:視圖文件
├── web:可以訪問的目錄
└── widgets:一些常用的小掛件的類文件
**入口文件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')
);
$application = new yii\web\Application($config);
$application->run();
* * * * *
1.定義了 YII_DEBUG , 那么表示當前為調試狀態,應用在運行過程中,會有一些調試信息的輸出。 在拋出異常時,也會有一個詳細的調用棧的顯示。默認情況下, YII_DEBUG 為 false 。 但在開發過程中,最好按上面寫的那樣,定義為 true 這樣便于查找和分析錯誤。
2.定義了 YII_ENV ,那么就是指定了當前應用的運行環境。 上面的代碼顯示應用將運行于 dev 環境。默認情況下, YII_ENV 為 prod 表示產品環境。
這些環境只是一個名稱,具體的意義和環境內容要看環境的定義。 dev prod 是Yii安裝后默認的兩個環境,分別表示開發環境和最終的產品環境。 此外還有一個 test 環境,表示測試環境。
環境與模式的作用不同。環境在代碼中主要是影響配置文件。 YII_ENV 的 dev prod test 三種環境, 會分別使 YII_ENV_DEV YII_ENV_PROD YII_ENV_TEST 的值為 true 。 這樣,在應用的配置中,特別是在相同的一個配置文件中,可以對不同環境作出不同的配置。
比如,你希望在測試環境下,**使用另一個數據庫。在開發環境下,啟用調試工作條,等等**。那么,可以這么做:
$config = [...];
if (!YII_ENV_TEST) {
// 以下配置項僅在測試環境中起作用
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = 'yii\debug\Module';
$config['modules']['gii'] = 'yii\gii\Module';
}
* * * * *
require引入了 /path/to/digpage.com/vendor 下面的 autoload.php 。 這個是composer的類自動加載機制注冊文件。引入這個文件后,**可以使用composer的類自動加載功能。**
引入了 vendor 下面的 yiisoft/yii2/Yii.php ,**這是Yii的工具類文件**。 引入了這個類文件后,才能使用Yii的提供的各種工具, 才有 Yii::createObject() Yii::$app 之類的東東可以使用。
引入了 /path/to/digpage.com/common 下面的 config/bootstrap.php 。 這個文件主要用于執行一些Yii應用引導的代碼,比如定義一系列的路徑別名:
引入了 path/to/digpage.com/frontend 下面的 config/bootstrap.php 。 作用與上面類似,只是其中的代碼---**僅適用于當前應用**(frontend)--。 而第三個require中的,是適應于所有應用(common)。
* * * * *
接下來是一個函數 yii\helpers\ArrayHelper::merge() 。 這個函數的作用在于**合并參數所指定的各個數組。**其中,后面的數組會把前面數組中相同下標的元素覆蓋掉。 這個語句的作用,就是讀取、合并應用的各配置文件并保存在 $config 變量中。 這里我們看到一共是讀取了4個配置文件:
依次是通用目錄common下的2個配置文件,和當前應用frontend下的2個配置文件。 在優先順序上,當前的配置覆蓋通用的配置。 同時,帶有 -local 的配置文件在后,所以,本地配置文件覆蓋團隊配置文件。
最后,以 $config 為參數,實例化了一個 Application 對象,并調用他的 run() 函數。 這時,Yii應用就跑起來了。