Yii Framework 教程可以參見官方中文文檔 ,那么為什么還要寫這個(gè)開發(fā)教程呢? 本教程目的是通過不同的視角(主要是通過開發(fā) Windows 應(yīng)用 C++,C#程序員的角度)幫助 Windows 桌面應(yīng)用或 ASP.Net 程序員較快的掌握 PHP Yii Framework 應(yīng)用程序框架。 使用 PHP 開發(fā) Web 應(yīng)用的一個(gè)重要好處是可以應(yīng)用于各種操作系統(tǒng)(Unix,Windows,Mac OS),而不像 Asp.Net 一般只能應(yīng)用中 Windows 操作系統(tǒng)上。使用 PHP+Apache+MySQL (XMAP/LAMP) 幾乎可以打遍天下無敵手:-)。
本教程所使用的操作系統(tǒng)為 Windows,開發(fā) IDE 為 VS.PHP,之所以使用這個(gè)開發(fā)環(huán)境是因?yàn)?VS.PHP 采用 Visual Studio 作為 IDE ,對(duì)于 Visual Studio 開發(fā)人員比較熟悉。而且可以用來同時(shí)開發(fā)調(diào)試 C#,PHP 應(yīng)用。 Yii Framework 本身和 IDE 無關(guān),你可以使用你喜歡的 PHP 開發(fā)工具來開發(fā) Yii 應(yīng)用(比如 Eclipse)。關(guān)于 VS.PHP 的介紹可以參見 VS.PHP + YiiFramework 組合開發(fā) PHP 應(yīng)用。本教程關(guān)于 Yii Framework 知識(shí)也和開發(fā) IDE 無關(guān),可以應(yīng)用到各種開發(fā)環(huán)境,你可以選擇你自己喜歡的開發(fā)環(huán)境。
在創(chuàng)建第一個(gè)應(yīng)用之間,需要下載 Yii 開發(fā)包,下載可以到 Yii 網(wǎng)站 http://www.yiiframework.com/download/ 下載,目前版本為 1.1.12, 下載后直接解壓,為方便起見將其解壓到 C:根目錄下:
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.1.jpg" alt="圖片1.1" />
使用 VS.PHP 的還有一個(gè)好處是其自帶了 Apache Web 服務(wù)器,因此無需另外安裝,你也可以安裝 XAMP (Apache+MySQL+PHP) ,但如需要使用 MySQL,則另外需安裝 MySQL.
安裝好 Yii Framework 之后,我們就使用 VS.PHP 來創(chuàng)建第一個(gè) PHP 應(yīng)用,Hello World。
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.2.jpg" alt="圖片1.2" />
VS.PHP 創(chuàng)建 HelloWorld 項(xiàng)目,并添加一個(gè) index.php 文件。
此時(shí)修改 index.php 為
<?php
print "Hello, World!";
?>
按 F5 運(yùn)行程序,VS.PHP 打開確省瀏覽器,顯示“Hello,World!”. 但這不是一個(gè) Yii 應(yīng)用?。?!,我們還沒有使用 Yii Web 應(yīng)用程序框架,Yii Framework 是一個(gè)純面向?qū)ο蟮膽?yīng)用程序框架。其 Web 程序的 Application 類為 CWebApplication 類。并采用了 MVC 模型。
下面的示意圖展示了 Yii 應(yīng)用的靜態(tài)結(jié)構(gòu)
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.3.jpg" alt="圖片1.3" />
下圖展示了一個(gè) Yii 應(yīng)用在處理用戶請(qǐng)求時(shí)典型的工作流
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.4.jpg" alt="圖片1.4" />
Yii 應(yīng)用本身有很多配置,比如缺省的 Controller ,action 是否使用 Log 文件等。對(duì)于 Hello,World 這個(gè)簡(jiǎn)單的應(yīng)用,就全部使用缺省值。缺省的 Controller 為 SiteController, Action 為 indexAction. 也就是說,比如你的網(wǎng)站為 www.guidebee.com ,如果你采用 Yii Framework, 用戶請(qǐng)求 www.guidebee.com 時(shí),Yii 應(yīng)用的 CWebApplication 將創(chuàng)建類 SiteController 的實(shí)例并調(diào)用 SiteController 的 indexAction 方法,(相當(dāng)于 C# Console 應(yīng)用的 Program 的 main 方法)。
Yii 項(xiàng)目使用不同的目錄來存放 Controller,Action,View,Layout 等,其缺省目錄結(jié)構(gòu)如下
testdrive/
index.php Web 應(yīng)用入口腳本文件
index-test.php 功能測(cè)試使用的入口腳本文件
assets/ 包含公開的資源文件
css/ 包含 CSS 文件
images/ 包含圖片文件
themes/ 包含應(yīng)用主題
protected/ 包含受保護(hù)的應(yīng)用文件
yiic yiic 命令行腳本
yiic.bat Windows 下的 yiic 命令行腳本
yiic.php yiic 命令行 PHP 腳本
commands/ 包含自定義的 'yiic' 命令
shell/ 包含自定義的 'yiic shell' 命令
components/ 包含可重用的用戶組件
Controller.php 所有控制器類的基礎(chǔ)類
Identity.php 用來認(rèn)證的 'Identity' 類
config/ 包含配置文件
console.php 控制臺(tái)應(yīng)用配置
main.php Web 應(yīng)用配置
test.php 功能測(cè)試使用的配置
controllers/ 包含控制器的類文件
SiteController.php 默認(rèn)控制器的類文件
data/ 包含示例數(shù)據(jù)庫(kù)
schema.mysql.sql 示例 MySQL 數(shù)據(jù)庫(kù)
schema.sqlite.sql 示例 SQLite 數(shù)據(jù)庫(kù)
testdrive.db 示例 SQLite 數(shù)據(jù)庫(kù)文件
extensions/ 包含第三方擴(kuò)展
messages/ 包含翻譯過的消息
models/ 包含模型的類文件
LoginForm.php 'login' 動(dòng)作的表單模型
ContactForm.php 'contact' 動(dòng)作的表單模型
runtime/ 包含臨時(shí)生成的文件
tests/ 包含測(cè)試腳本
views/ 包含控制器的視圖和布局文件
layouts/ 包含布局視圖文件
main.php 所有視圖的默認(rèn)布局
column1.php 使用單列頁(yè)面使用的布局
column2.php 使用雙列的頁(yè)面使用的布局
site/ 包含 'site' 控制器的視圖文件
pages/ 包含 "靜態(tài)" 頁(yè)面
about.php "about" 頁(yè)面的視圖
contact.php 'contact' 動(dòng)作的視圖
error.php 'error' 動(dòng)作的視圖(顯示外部錯(cuò)誤)
index.php 'index' 動(dòng)作的視圖
login.php 'login' 動(dòng)作的視圖
system/ 包含系統(tǒng)視圖文件
這個(gè)目錄結(jié)構(gòu)可以通過 Yii 自帶的工具來創(chuàng)建缺省的文件建立第一個(gè) Yii 應(yīng)用。
對(duì)于 Hello World 項(xiàng)目來說,沒有必要這么復(fù)雜,我們只需創(chuàng)建 protected \controllers 目錄以存放 SiteController.php。
每個(gè) Yii 應(yīng)用都有的入口腳本,可以理解為 C#的 Program 類。這個(gè)入口腳本大同小異
<?php
// 包含Yii引導(dǎo)文件
//require_once(dirname(__FILE__).'/../../framework/yii.php');
$yii='C:/yiiframework/yii.php';
// 發(fā)布應(yīng)用時(shí),去掉下面代碼避免產(chǎn)生調(diào)試信息
defined('YII_DEBUG') or define('YII_DEBUG',true);
require_once($yii);
// 創(chuàng)建一個(gè)應(yīng)用實(shí)例并執(zhí)行
Yii::createWebApplication()->run();
前面說過 Yii 的缺省 Controller為SiteController,缺省 Action 為 actionIndex, 因此 HelloWorld 的 SiteController 代碼如下:
/**
* SiteController is the default controller to handle user requests.
*/
class SiteController extends CController
{
/**
* Index action is the default action in a controller.
*/
public function actionIndex()
{
echo 'Hello World';
}
}
此時(shí)再運(yùn)行應(yīng)用,可以在瀏覽器中顯示“Hello,World”。 目前沒有使用 MVC 模型直接在 Controller 使用 echo 打印出“Hello,World”, 下面稍微修改一下代碼,創(chuàng)建一個(gè)簡(jiǎn)單的 View。
View 缺省目錄為 protected 目錄下的 views 子目錄,和 Controller 類對(duì)于,比如 SiteController 對(duì)應(yīng)到 Views 目錄下的 site 子目錄,和 Asp.Net 一樣,Yii 的 View(對(duì)應(yīng)到 Asp.Net 的 Page 類)也可以使用 MasterPage,Yii 應(yīng)用成為 Layout,缺省 Layout 存放在 views 的 layouts 子目錄。
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.5.jpg" alt="圖片1.5" />
修改 SiteController 的 actionIndex 方法,改為:
public function actionIndex()
{
$this->render("index");
}
View 視圖是一個(gè)包含了主要的用戶交互元素的 PHP 腳本.他可以包含 PHP 語句,但是我們建議這些語句不要去改變數(shù)據(jù)模型,且最好能夠保持其單純性(單純作為視圖)。為了實(shí)現(xiàn)邏輯和界面分離,大段的邏輯應(yīng)該被放置于控制器或模型中,而不是視圖中,視圖有一個(gè)名字,當(dāng)渲染(render)時(shí),名字會(huì)被用于識(shí)別視圖腳本文件。
actionIndex 通過 render 方法來顯示一個(gè) View,對(duì)應(yīng)到 views->site 目錄下的 index.php 。render 缺省使用 views ->layouts 下的 main.php 作為 Layout (布局,MasterPage)
布局是一種用來修飾視圖的特殊的視圖文件.它通常包含了用戶界面中通用的一部分視圖.例如:布局可以包含 header 和 footer 的部分,然后把內(nèi)容嵌入其間.
......header here......
<?php echo $content; ?>
......footer here......
其中的 $content 則儲(chǔ)存了內(nèi)容視圖的渲染結(jié)果.
來看一下View是目錄下的 index.php (View) 代碼:
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/1.6.jpg" alt="圖片1.6" />
本例下載