由于Yii2.0使用了許多PHP的新特性,因此,Yii需要PHP5.4.0以上版本。
有兩種方法可以安裝Yii,一種是使用Composer,另一種是直接下載壓縮包。
## 使用Composer安裝Yii[](http://www.digpage.com/install.html#composeryii "Permalink to this headline")
官方推薦使用Composer安裝Yii。這樣更方便后期維護,如果需要添加新的擴展或者升級Yii,只要一句命令就OK了。
用過Yii1.1的讀者可能還有印象,安裝Yii和構建應用是兩個步驟:安裝Yii,運行Yii搭建應用框架。 但是,如果使用Composer方法安裝Yii,安裝和構建應用是一步完成了。
這里并不打算介紹Composer的用法,這方面的內容通過官方文檔或者搜索引擎都可以找到。 使用Composer安裝Yii,也有兩種選擇:使用基本模版或者高級模版。 這兩者最主要的區別在于高級模版提供了環境切換和前后臺分離。 對于團隊開發而言,環境切換功能很實用。對于大型應用,前后臺分離既是邏輯上的劃分,也是安全上的需要。 高級模版功能相對豐富,因此,本書在大多數情況下,都使用高級模版所創建應用進行講解。 至于基本模版,原理上是相通的。
Yii2.0要求Composer必須安裝 composer asset 插件。 這個插件使得Composer可以兼容實現NPM和BOWER包管理器的功能。?[NPM](https://www.npmjs.org/)?和?[BOWER](http://bower.io/)?主要用于前端資源(如JS庫等)的管理。
~~~
# 安裝Composer,如果已經安裝過,可不必再安裝
# curl -s http://getcomposer.org/installer | php
# 對于已經安裝過Composer的,可以對其進行更新
php ../composer.phar self-update
# 為Composer 安裝 composer asset 插件
php ../composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2"
# 使用高級模版安裝Yii應用到 digpage.com 目錄下
php ../composer.phar create-project --prefer-dist yiisoft/yii2-app-advanced digpage.com
# 使用基礎模版安裝
# composer create-project --prefer-dist yiisoft/yii2-app-basic digpage.com
~~~
如果想使用最新的開發版本的Yii基礎模版,可加入?--stability=dev?參數。
## 從壓縮包安裝[](http://www.digpage.com/install.html#id1 "Permalink to this headline")
如果使用壓縮包安裝方式,請按以下步驟:
1. 從yiiframework.com下載最新的壓縮包。
2. 將壓縮包解壓縮到?/path/to/digpage.com?目錄。
3. 修改?config/web.php?文件,輸入?cookieValidationKey?配置項密鑰。 這個密鑰主要用于cookie驗證。 如果使用Composer安裝,則Composer會自動設置一個密鑰:
~~~
// !!! insert a secret key in the following (if it is empty) -
// this is required by cookie validation
'cookieValidationKey' => 'enter your secret key here',
~~~
## 設置Web服務器[](http://www.digpage.com/install.html#web "Permalink to this headline")
常用的Web服務器有nginx + php-fpm和Apache。而且從趨勢上看,前者的比重正不斷提高。
本教程不打算介紹nginx和Apache的配置安裝,這些內容從官方文檔和搜索引擎都可以找到相關內容。 這里大體上介紹如何配置Web服務器,使其能夠讓Yii跑起來。
由于高級模版應用具有前臺和后臺。 一般來講,前臺和后臺分離可以使用不同的主機名、端口,或者使用不同的路徑名。使用不同的主機名的,如:
~~~
http://frontend.example.com/
http://backend.example.com/
~~~
使用不同的路徑名的,如:
~~~
http://www.example.com/frontend/
http://www.example.com/backend/
~~~
無論使用何種方式,目的都是分離前臺和后臺。由于是在本地開發,我們使用不同的端口來分離前臺和后臺。 體現在服務器上,采不同主機名、端口進行的分離方式,意味著不同的虛擬主機,甚至是不同的物理服務器。 而不同的路徑名的,則表現為同一臺主機,不同目錄。 這里,我們使用不同的端口來區別前后臺,但在物理上,前端和后端面都部署在同一臺服務器上,也就是使用虛擬主機。
使用Nginx的配置如下:
~~~
# for frontend
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
server_name localhost;
root /path/to/digpage.com/frontend/web;
index index.php;
access_log /path/to/digpage.com/frontend/log/access.log main;
error_log /path/to/digpage.com/frontend/log/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.(ht|svn|git) {
deny all;
}
}
# for backend
server {
# ...other settings...
listen 81;
server_name localhost;
root /path/to/digpage.com/backend/web;
# ...other settings...
}
~~~
如果使用Apache,也是分前臺和后前的配置,以前臺為例:
~~~
DocumentRoot "path/to/digpage.com/frontend/web"
<Directory "path/to/digpage.com/frontend/web">
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
~~~
對于后臺,也是設置一個虛擬機,路徑改為?path/to/digpage.com/backend/web?即可。
## Yii中的前后臺[](http://www.digpage.com/install.html#id2 "Permalink to this headline")
Yii從來不認得什么是前臺,什么是后臺。從本質來講,前臺和后臺都是應用。 換句話說,你可以先用基本模板開發出一個應用,具有前臺的全部功能,然后部署。 如法炮制另一個獨立的,具有后臺全部功能的應用。 這在原理上是一樣一樣的。只是,按照我們的經驗,前臺和后臺從邏輯上講,組成一應用比較符合我們的認知。 而且,從代碼復用的角度來講,我們更希望前臺和后臺的代碼可以互通互用,盡量不要重復造輪子。 但是,對于Yii來講,前臺就是一個完備的應用,后臺又是另一個應用。這點區別請讀者朋友們留意。
那么Yii的高級模版是如何實現把兩個應用整合成一個我們認識上的應用的呢。 我們觀察一下/path/to/digpage.com/?目錄,看看這個高級模版是如何組織代碼的。不難發現其中有二個目錄frontend?backend?分別代表了前臺、后臺。
其實你把?frontend?backend?中的任意1個目錄刪除,是不影響剩下的目錄的正常運轉的。 也就是說,他們相互間是獨立的。只不過在代碼組織上,他們都放在了?/path/to/application/?目錄下面。
如果深入下去,你會發現不光?frontend?backend?其實?console?也是一個完備的Yii應用, 它通常用于維護,是個命令行應用。
總的說,Yii的前臺、后臺什么的,是我們命名的概念,他們都是獨立而完備的應用。 同時,他們又都具有一定的聯系,這些聯系突出體現在了?common?目錄上。 這個目錄從字面的意思看,就是通用,對于組織到一起的?frontend?backend?console?而言,?common?中的內容,他們都可以使用。這是Yii中實現代碼復用的技巧所在。
更多關于Yii應用的目錄結構的內容,請看?[_Yii應用的目錄結構和入口腳本_](http://www.digpage.com/app_struct.html#app-struct)?部分。
## 配置應用環境[](http://www.digpage.com/install.html#id3 "Permalink to this headline")
還差最后一步就完成Yii的安裝了。這最后一步,就是設置應用環境。在Yii的高級模版應用中,引入了環境的概念。
環境就是指開發環境、測試環境、產品環境等。 對于Yii而言,所謂的環境,就是一組與運行環境相關的配置文件和入口腳本。
Yii對于環境的使用是這樣一個原理:采用一個自動化的腳本,每次需要切換環境時,就運行腳本, 由開發者確定要采用何種環境,然后將對應環境的所有配置文件都覆蓋當前的配置文件。 在Yii中,與環境相關的文件其實就只有兩個:一個是入口腳本?index.php?另一個就是各類配置文件。
在切換環境時,只需要一行命令就全部搞定:
~~~
php /path/to/digpage.com/init
~~~
這行命令會提示你選擇何種開發環境,并確認是否覆蓋當前的配置文件。下面是輸出的內容:
~~~
Yii Application Initialization Tool v1.0
Which environment do you want the application to be initialized in?
[0] Development
[1] Production
Your choice [0-1, or "q" to quit] 0 // 這里選擇了 Development 環境
Initialize the application under 'Development' environment? [yes|no] yes
Start initialization ...
generate yii
generate common/config/main-local.php
generate common/config/params-local.php
generate backend/config/main-local.php
generate backend/config/params-local.php
generate backend/web/index.php
generate backend/web/index-test.php
generate frontend/config/main-local.php
generate frontend/config/params-local.php
generate frontend/web/index.php
generate frontend/web/index-test.php
generate console/config/main-local.php
generate console/config/params-local.php
generate cookie validation key in backend/config/main-local.php
generate cookie validation key in frontend/config/main-local.php
chmod 0777 backend/runtime
chmod 0777 backend/web/assets
chmod 0777 frontend/runtime
chmod 0777 frontend/web/assets
chmod 0755 yii
... initialization completed.
~~~
從上面的輸出可以看出來,?init?腳本其實做了3件事:
* 復制文件到相應位置,覆蓋當前配置。
* 生成?cookieValidationKey?并寫入相應文件。
* 設置相關文件和目錄的權限。
如果想更加便捷,可以直接指定相關的參數:
~~~
php /path/to/yii-application/init --env=Production overwrite=All
~~~
第二種方式直接在命令行中指明使用的環境,并要求全部覆蓋當前配置文件。
## 檢驗安裝情況[](http://www.digpage.com/install.html#id4 "Permalink to this headline")
在這一篇,我們已經完成了Yii的安裝,可能使用了Composer,也可能使用了壓縮包。 接著,我們配置好了Web服務器。 最后,我們運行了?init?命令。 那么,Yii應用的基本框架就已經搭建好了。你可在你的瀏覽器中試試效果。 使用?http://localhost:80/?可以打開網站前臺,使用http://localhost:81?可以打開后臺。
如果覺得《深入理解Yii2.0》對您有所幫助,也請[幫助《深入理解Yii2.0》](http://www.digpage.com/donate.html#donate)。 謝謝!
- 更新記錄
- 導讀
- Yii是什么
- Yii2.0的亮點
- 背景知識
- 如何閱讀本書
- Yii基礎
- 屬性(Property)
- 事件(Event)
- 行為(Behavior)
- Yii約定
- Yii應用的目錄結構和入口腳本
- 別名(Alias)
- Yii的類自動加載機制
- 環境和配置文件
- 配置項(Configuration)
- Yii模式
- MVC
- 依賴注入和依賴注入容器
- 服務定位器(Service Locator)
- 請求與響應(TBD)
- 路由(Route)
- Url管理
- 請求(Reqeust)
- Web應用Request
- Yii與數據庫(TBD)
- 數據類型
- 事務(Transaction)
- AcitveReocrd事件和關聯操作
- 樂觀鎖與悲觀鎖
- 《深入理解Yii2.0》視頻教程
- 第一講:基礎配置
- 第二講:用戶登錄
- 第三講:文章及評論的模型
- 附錄
- 附錄1:Yii2.0 對比 Yii1.1 的重大改進
- 附錄2:Yii的安裝
- 熱心讀者