環境的目錄結構
首先了解Yii各環境文件。前面我們講到,每個Yii環境就是一組配置文件, 包含了入口腳本 index.php 和各類配置文件。 其實他們都放在 /path/to/digpage.com/environments 目錄下面,我們看看這個目錄都有哪些東西
** dev**
│ ├── backend
│ │ ├── config
│ │ │ ├── main-local.php
│ │ │ └── params-local.php
│ │ └── web
│ │ ├── index-test.php
│ │ └── index.php
│ ├── common
│ │ └── config
│ │ ├── main-local.php
│ │ └── params-local.php
│ ├── console
│ │ └── config
│ │ ├── main-local.php
│ │ └── params-local.php
│ ├── frontend
│ │ ├── config
│ │ │ ├── main-local.php
│ │ │ └── params-local.php
│ │ └── web
│ │ ├── index-test.php
│ │ └── index.php
│ └── yii
├── **prod**
│ ├── backend
│ │ ├── config
│ │ │ ├── main-local.php
│ │ │ └── params-local.php
│ │ └── web
│ │ └── index.php
│ ├── common
│ │ └── config
│ │ ├── main-local.php
│ │ └── params-local.php
│ ├── console
│ │ └── config
│ │ ├── main-local.php
│ │ └── params-local.php
│ ├── frontend
│ │ ├── config
│ │ │ ├── main-local.php
│ │ │ └── params-local.php
│ │ └── web
│ │ └── index.php
│ └── yii
└── index.php
環境目錄下的 index.php 并不是通常所說的web入口腳本,它其實是個定義文件。 定義了可以使用的環境,打開這個文件看一眼:
return [
'Development' => [
'path' => 'dev',
'setWritable' => [
'backend/runtime',
'backend/web/assets',
'frontend/runtime',
'frontend/web/assets',
],
'setExecutable' => [
'yii',
],
'setCookieValidationKey' => [
'backend/config/main-local.php',
'frontend/config/main-local.php',
],
],
'Production' => [
'path' => 'prod',
'setWritable' => [
'backend/runtime',
'backend/web/assets',
'frontend/runtime',
'frontend/web/assets',
],
'setExecutable' => [
'yii',
],
'setCookieValidationKey' => [
'backend/config/main-local.php',
'frontend/config/main-local.php',
],
],
];
· path 指明了當前環境所對應的配置文件存放目錄。如 Productions 環境對應的目錄為 prod 。
· setWritable 指明了需要 init 腳本設定為可寫模式的目錄,這些目錄Yii應用在運行時會寫入。
· setExecutable 指明了要將哪個文件設為可執行。這個文件就是命令行應用的入口文件了。
· setCookieValidationsKey 指明了向哪個文件寫入 cookieValidationKey 配置項。
對于分散于各處的 web 和 config 目錄而言,它們也是有共性的。
· 凡是 web 目錄,存放的都是web應用的入口腳本,一個 index.php 和一個測試版本的 index-test.php
· 凡是 config 目錄,存放的,都是本地配置信息 main-local.php 和 params-local.php
**環境配置的生效規則**
上面講到的配置文件有很多,有前臺、后臺、命令行和common的,有帶local的、不帶local的, 有params、main等,看起來好復雜的樣子。那么一個環境發生作用時,這些文件是怎么個順序呢? 這要看看 入口文件index.php 部分的內容,但總的原則是:
· **前臺、后臺和命令行的配置文件間,互不干擾,各管各的。沒有先后順序一說。** 因為Yii在任意時間,要么是在跑前臺,要么是在跑后臺。還記得么?他們是不同的應用,他們是獨立的。 但是,這里有個common,通用于前臺、后臺等。common的內容被前臺或后臺的覆蓋。
· local和不帶local的。明顯的,local的是本地配置文件,不帶local的是團隊間通用的配置。 因此,local的覆蓋不帶local的。
· params, main。這2類文件表示的配置內容并不重疊,他們邏輯上不存在誰覆蓋誰的問題。 如果看看源代碼,可以發現,params只是main配置的一部分。 而main的內容,是作為參數傳遞給應用的構造函數。 因此,這兩者不存在誰覆蓋誰的問題。