版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Yii framework 中文手冊(cè)Yii 是什么Yii 是一個(gè)基于組件、用于開發(fā)大型 Web 應(yīng)用的高性能 PHP 框架。它將 Web 編程中的可重用性發(fā)揮到極致,能夠顯著加速開發(fā)進(jìn)程。Yii(讀作“易”)代表簡單(easy)、高效(efficient)、可擴(kuò)展(extensible)。需求要運(yùn)行一個(gè)基于 Yii 開發(fā)的 Web 應(yīng)用,你需要一個(gè)支持 PHP 5.1.0 (或更高版本)的 Web 服務(wù)器。對(duì)于想使用 Yii 的開發(fā)者而言,熟悉面向?qū)ο缶幊?OOP)會(huì)使開發(fā)更加輕松,因?yàn)?Yii 就是一個(gè)純 OOP 框架。Yii 適合做什么?Yii 是一個(gè)通用 Web 編程框架,能夠開發(fā)任何類
2、型的 Web 應(yīng)用。它是輕量級(jí)的,又裝配了很好很強(qiáng)大的緩存組件,因此尤其適合開發(fā)大流量的應(yīng)用,比如門戶、論壇、內(nèi)容管理系統(tǒng)(CMS)、電子商務(wù)系統(tǒng),等等。Yii 和其它框架比起來怎樣?和大多數(shù) PHP 框架一樣,Yii 是一個(gè) MVC 框架。Yii 以性能優(yōu)異、功能豐富、文檔清晰而勝出其它框架。它從一開始就為嚴(yán)謹(jǐn)?shù)?Web 應(yīng)用開發(fā)而精心設(shè)計(jì),不是某個(gè)項(xiàng)目的副產(chǎn)品或第三方代碼的組合,而是融合了作者豐富的 Web 應(yīng)用開發(fā)經(jīng)驗(yàn)和其它熱門 Web 編程框架(或應(yīng)用)優(yōu)秀思想的結(jié)晶。安裝步驟Yii 的安裝由如下兩步組成:1. 從 下載 Yii 框架。 2. 將 Yii 壓縮包解壓至一個(gè) Web 可訪
3、問的目錄。 提示: 安裝在 Web 目錄不是必須的,每個(gè) Yii 應(yīng)用都有一個(gè)入口腳本,只有它才必須暴露給 Web 用戶。其它 PHP 腳本(包括 Yii)應(yīng)該保護(hù)起來不被 Web 訪問,因?yàn)樗鼈兛赡軙?huì)被黑客利用。需求安裝完 Yii 以后你也許想驗(yàn)證一下你的服務(wù)器是否滿足使用 Yii 的要求,只需瀏覽器中輸入如下網(wǎng)址來訪問需求檢測腳本:http:/hostname/path/to/yii/requirements/index.phpYii 的最低需求是你的 Web 服務(wù)器支持 PHP 5.1.0 或更高版本。Yii 在 Windows 和 Linux 系統(tǒng)上的 Apache HTTP 服務(wù)器
4、中測試通過,應(yīng)該在其它支持 PHP 5 的 Web 服務(wù)器和平臺(tái)上也工作正常。建立第一個(gè) Yii 應(yīng)用建立的yii的代碼是yiic 一個(gè)工具:d:AppServwwwyiiframeworkyiic webapp d:AppServwwwtestdrived:AppServwwwtestdrive :生成的那個(gè)項(xiàng)目文件為了對(duì) Yii 有個(gè)初步認(rèn)識(shí),我們?cè)诒竟?jié)講述如何建立第一個(gè) Yii 應(yīng)用。我們將使用強(qiáng)大的 yiic 工具,它用來自動(dòng)生成各種代碼。假定 YiiRoot 為 Yii 的安裝目錄。在命令行運(yùn)行 yiic,如下所示:% YiiRoot/framework/yiic webapp We
5、bRoot/testdrive注意: 在 MacOS、Linux 或 Unix 系統(tǒng)中運(yùn)行 yiic 時(shí),你可能需要修改 yiic 文件的權(quán)限使它能夠運(yùn)行。你也可以用 php YiiRoot/framework/yiic.php 來代替 yiic。這將在 WebRoot/testdrive 目錄下建立一個(gè)最基本的 Yii 應(yīng)用,WebRoot 代表你的 Web 服務(wù)器根目錄。這個(gè)應(yīng)用具有所有必須的目錄和文件,因此可以方便地在此基礎(chǔ)上添加更多功能。不用寫一行代碼,我們可以在瀏覽器中訪問如下 URL 來看看我們第一個(gè) Yii 應(yīng)用:http:/hostname/testdrive/index.ph
6、p正如我們看到的,這個(gè)應(yīng)用包含三個(gè)頁面:首頁、聯(lián)系頁、登錄頁。首頁展示一些關(guān)于應(yīng)用和用戶登錄狀態(tài)的信息,聯(lián)系頁顯示一個(gè)聯(lián)系表單以便用戶填寫并提交他們的咨詢,登錄頁允許用戶先通過認(rèn)證然后訪問已授權(quán)的內(nèi)容。查看下列截圖了解更多:首頁聯(lián)系頁輸入錯(cuò)誤的聯(lián)系頁提交成功的聯(lián)系頁登錄頁下面的樹圖描述了我們這個(gè)應(yīng)用的目錄結(jié)構(gòu)。請(qǐng)查看約定以獲取該結(jié)構(gòu)的詳細(xì)解釋。testdrive/ index.php Web 應(yīng)用入口腳本文件 assets/ 包含公開的資源文件 css/ 包含 CSS 文件 images/ 包含圖片文件 themes/ 包含應(yīng)用主題 protected/ 包含受保護(hù)的應(yīng)用文件 yiic yii
7、c 命令行腳本 yiic.bat Windows 下的 yiic 命令行腳本 commands/ 包含自定義的 'yiic' 命令 shell/ 包含自定義的 'yiic shell' 命令 components/ 包含可重用的用戶組件 MainMenu.php 'MainMenu' 掛件類 Identity.php 用來認(rèn)證的 'Identity' 類 views/ 包含掛件的視圖文件 mainMenu.php 'MainMenu' 掛件的視圖文件 config/ 包含配置文件 console.php 控制臺(tái)應(yīng)用
8、配置 main.php Web 應(yīng)用配置 controllers/ 包含控制器的類文件 SiteController.php 默認(rèn)控制器的類文件 extensions/ 包含第三方擴(kuò)展 messages/ 包含翻譯過的消息 models/ 包含模型的類文件 LoginForm.php 'login' 動(dòng)作的表單模型 ContactForm.php 'contact' 動(dòng)作的表單模型 runtime/ 包含臨時(shí)生成的文件 views/ 包含控制器的視圖和布局文件 layouts/ 包含布局視圖文件 main.php 所有視圖的默認(rèn)布局 site/ 包含 '
9、site' 控制器的視圖文件 contact.php 'contact' 動(dòng)作的視圖 index.php 'index' 動(dòng)作的視圖 login.php 'login' 動(dòng)作的視圖 system/ 包含系統(tǒng)視圖文件連接到數(shù)據(jù)庫大多數(shù) Web 應(yīng)用由數(shù)據(jù)庫驅(qū)動(dòng),我們的測試應(yīng)用也不例外。要使用數(shù)據(jù)庫,我們首先需要告訴應(yīng)用如何連接它。修改應(yīng)用的配置文件 WebRoot/testdrive/protected/config/main.php 即可,如下所示:return array( . 'components'=>arra
10、y( . 'db'=>array( 'connectionString'=>'sqlite:protected/data/source.db', ), ), .);在上面的代碼中,我們添加了 db 條目至 components 中,指示應(yīng)用在需要的時(shí)候連接到 SQLite 數(shù)據(jù)庫 WebRoot/testdrive/protected/data/source.db。注意: 要使用 Yii 的數(shù)據(jù)庫功能,我們需要啟用 PHP 的 PDO 擴(kuò)展和相應(yīng)的驅(qū)動(dòng)擴(kuò)展。對(duì)于測試應(yīng)用來說,我們需要啟用 php_pdo 和 php_pdo_sqlit
11、e 擴(kuò)展。接下來,我們需要準(zhǔn)備一個(gè) SQLite 數(shù)據(jù)庫以使上面的配置生效。使用一些 SQLite 管理工具,我們可以建立一個(gè)包含如下模式的數(shù)據(jù)庫:CREATE TABLE User ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL);簡單起見,我們只在庫中建立了一個(gè) User 表。SQLite 數(shù)據(jù)庫文件保存在 WebRoot/testdrive/protecte
12、d/data/source.db。注意,數(shù)據(jù)庫文件和包含它的目錄都要求 Web 服務(wù)器進(jìn)程可寫。實(shí)現(xiàn) CRUD 操作激動(dòng)人心的時(shí)刻來了。我們想要為剛才建立的 User 表實(shí)現(xiàn) CRUD (create, read, update 和 delete) 操作,這也是實(shí)際應(yīng)用中最常見的操作。我們還是用 yiic 工具來幫助我們生成需要的代碼,這個(gè)過程通常稱為“腳手架”。% cd WebRoot/testdrive% YiiRoot/framework/yiic shellYii Interactive Tool v1.0Please type 'help' for help. Typ
13、e 'exit' to quit.>> model User generate User.phpThe 'User' class has been successfully created in the following file: D:wwwroottestdriveprotectedmodelsUser.phpIf you have a 'db' database connection, you can test it now with: $model=User:model()->find(); print_r($mode
14、l);>> crud User generate UserController.php generate create.php mkdir D:/wwwroot/testdrive/protected/views/user generate update.php generate list.php generate show.phpCrud 'user' has been successfully created. You may access it via:http:/hostname/path/to/index.php?r=user如上所示,我們使用 yiic
15、的 shell 命令來和我們剛才建立的應(yīng)用進(jìn)行交互。在提示符后面,我們可以輸入一個(gè)有效的 PHP 語句或表達(dá)式來運(yùn)行并顯示。我們還可以完成一些諸如 model 或 crud 之類的任務(wù)。model 命令自動(dòng)生成一個(gè)基于 User 表結(jié)構(gòu)的 User 模型類,crud 命令生成實(shí)現(xiàn) User 模型 CRUD 操作的控制器類和視圖。注意: 如果你更改了你的任何代碼或配置,請(qǐng)重新輸入 yiic shell 以使你的新代碼或配置文件生效。還有,確保你使用了正確的 PHP CLI 來運(yùn)行 yiic,否則你會(huì)碰到 ".could not find driver" 之類的錯(cuò)誤(即使你確信
16、已經(jīng)啟用了 PDO 和相應(yīng)的驅(qū)動(dòng))。這類錯(cuò)誤通常是因?yàn)?PHP CLI 使用了不恰當(dāng)?shù)?php.ini。讓我們看看成果,訪問如下 URL:http:/hostname/testdrive/index.php?r=user這會(huì)顯示一個(gè) User 表中記錄的列表。因?yàn)槲覀兊谋硎强盏?,現(xiàn)在什么都沒顯示。點(diǎn)擊頁面上的 新增用戶 鏈接,如果沒有登錄的話我們將被帶到登錄頁。登錄后,我們看到一個(gè)可供我們添加新用戶的表單。完成表單并點(diǎn)擊 建立 按鈕,如果有任何輸入錯(cuò)誤的話,一個(gè)友好的錯(cuò)誤提示將會(huì)顯示并阻止我們保存?;氐接脩袅斜眄?,我們應(yīng)該能看到剛才添加的用戶顯示在列表中。重復(fù)上述步驟以添加更多用戶。注意,如果
17、一頁顯示的用戶條目太多,列表頁會(huì)自動(dòng)分頁。如果我們使用 admin/admin 作為管理員登錄,我們可以在如下 URL 查看用戶管理頁:http:/hostname/testdrive/index.php?r=user/admin這會(huì)顯示一個(gè)包含用戶條目的漂亮表格。我們可以點(diǎn)擊表頭的單元格來對(duì)相應(yīng)的列進(jìn)行排序,而且它和列表頁一樣會(huì)自動(dòng)分頁。實(shí)現(xiàn)所有這些功能不要我們編寫一行代碼!用戶管理頁新增用戶頁模型-視圖-控制器 (MVC)Yii 實(shí)現(xiàn)了 Web 編程中廣為采用的“模型-視圖-控制器”(MVC)設(shè)計(jì)模式。MVC 致力于分離業(yè)務(wù)邏輯和用戶界面,這樣開發(fā)者可以很容易地修改某個(gè)部分而不影響其它。在
18、 MVC 中,模型表現(xiàn)信息(數(shù)據(jù))和業(yè)務(wù)規(guī)則;視圖包含用戶界面中用到的元素,比如文本、表單輸入框;控制器管理模型和視圖間的交互。除了 MVC,Yii 還引入了一個(gè)叫做 application 的前端控制器,它表現(xiàn)整個(gè)請(qǐng)求過程的運(yùn)行環(huán)境。Application 接收用戶的請(qǐng)求并把它分發(fā)到合適的控制器作進(jìn)一步處理。下圖描述了一個(gè) Yii 應(yīng)用的靜態(tài)結(jié)構(gòu):Yii 應(yīng)用的靜態(tài)結(jié)構(gòu)一個(gè)典型的處理流程下圖描述了一個(gè) Yii 應(yīng)用處理用戶請(qǐng)求時(shí)的典型流程:Yii 應(yīng)用的典型流程1. 用戶訪問 ,Web 服務(wù)器執(zhí)行入口腳本 index.php 來處理該請(qǐng)求。 2. 入口腳本建立一個(gè)應(yīng)用實(shí)例并運(yùn)行之。 3. 應(yīng)
19、用從一個(gè)叫 request 的應(yīng)用組件獲得詳細(xì)的用戶請(qǐng)求信息。 4. 在名為 urlManager 的應(yīng)用組件的幫助下,應(yīng)用確定用戶要請(qǐng)求的控制器和動(dòng)作。 5. 應(yīng)用建立一個(gè)被請(qǐng)求的控制器實(shí)例來進(jìn)一步處理用戶請(qǐng)求,控制器確定由它的actionShow 方法來處理 show 動(dòng)作。然后它建立并應(yīng)用和該動(dòng)作相關(guān)的過濾器(比如訪問控制和性能測試的準(zhǔn)備工作),如果過濾器允許的話,動(dòng)作被執(zhí)行。 6. 動(dòng)作從數(shù)據(jù)庫讀取一個(gè) ID 為 1 的 Post 模型。 7. 動(dòng)作使用 Post 模型來渲染一個(gè)叫 show 的視圖。 8. 視圖讀取 Post 模型的屬性并顯示之。 9. 視圖運(yùn)行一些掛件。 10. 視
20、圖的渲染結(jié)果嵌在布局中。 11. 動(dòng)作結(jié)束視圖渲染并顯示結(jié)果給用戶。 入口腳本入口腳本是在前期處理用戶請(qǐng)求的引導(dǎo)腳本。它是唯一一個(gè)最終用戶可以直接請(qǐng)求運(yùn)行的 PHP 腳本。大多數(shù)情況下,一個(gè) Yii 應(yīng)用的入口腳本只包含如下幾行:/ 部署到正式環(huán)境時(shí)去掉下面這行defined('YII_DEBUG') or define('YII_DEBUG',true);/ 包含 Yii 引導(dǎo)文件require_once('path/to/yii/framework/yii.php');/ 建立應(yīng)用實(shí)例并運(yùn)行$configFile='path/to/c
21、onfig/file.php'Yii:createWebApplication($configFile)->run();這段代碼首先包含了 Yii 框架的引導(dǎo)文件 yii.php,然后它配合指定的配置文件建立了一個(gè) Web 應(yīng)用實(shí)例并運(yùn)行。調(diào)試模式一個(gè) Yii 應(yīng)用能夠根據(jù) YII_DEBUG 常量的指示以調(diào)試模式或者生產(chǎn)模式運(yùn)行。默認(rèn)情況下該常量定義為 false,代表生產(chǎn)模式。要以調(diào)試模式運(yùn)行,在包含 yii.php 文件前將此常量定義為 true。應(yīng)用以調(diào)試模式運(yùn)行時(shí)效率較低,因?yàn)樗鼤?huì)生成許多內(nèi)部日志。從另一個(gè)角度來看,發(fā)生錯(cuò)誤時(shí)調(diào)試模式會(huì)產(chǎn)生更多的調(diào)試信息,因而在開發(fā)階段
22、非常有用。應(yīng)用應(yīng)用是指執(zhí)行用戶的訪問指令。其主要任務(wù)是解析用戶指令,并將其分配給相應(yīng)的控制器以進(jìn)行進(jìn)一步的處理。應(yīng)用同時(shí)也是一個(gè)存儲(chǔ)參數(shù)的地方。因?yàn)檫@個(gè)原因,應(yīng)用一般被稱為“前端控制器”。入口腳本將應(yīng)用創(chuàng)建為一個(gè)單例. 應(yīng)用單例可以在任何位置通過 Yii:app() 來訪問.應(yīng)用配置默認(rèn)情況下, 應(yīng)用是 CWebApplication 類的一個(gè)實(shí)例. 要對(duì)其進(jìn)行定制, 通常是在應(yīng)用實(shí)例被創(chuàng)建的時(shí)候提供一個(gè)配置文件 (或數(shù)組) 來初始化其屬性值. 另一個(gè)定制應(yīng)用的方法就是擴(kuò)展 CWebApplication 類.配置是一個(gè)鍵值對(duì)的數(shù)組. 每個(gè)鍵名都對(duì)應(yīng)應(yīng)用實(shí)例的一個(gè)屬性, 相應(yīng)的值為屬性的初始值
23、. 舉例來說, 下面的代碼設(shè)定了應(yīng)用的 名稱 和 默認(rèn)控制器 屬性.array( 'name'=>'Yii Framework', 'defaultController'=>'site',)我們一般將配置保存在一個(gè)單獨(dú)的PHP代碼里(e.g. protected/config/main.php). 在這個(gè)代碼里,我們返回以下參數(shù)數(shù)組,return array(.);為執(zhí)行這些配置,我們一般將這個(gè)文件作為一個(gè)配置,傳遞給應(yīng)用的構(gòu)造器。或者象下述例子這樣傳遞給Yii:createWebApplication() 我們一般在
24、 entry script里界定這些配置:$app=Yii:createWebApplication($configFile);提示: 如果應(yīng)用配置非常復(fù)雜,我們可以將這分成幾個(gè)文件,每個(gè)文件返回一部分配置參數(shù)。接下來,我們?cè)谥髋渲梦募镉肞HP include() 把其它 配置文件合并成一個(gè)配置數(shù)組。應(yīng)用的主目錄應(yīng)用的主目錄是指包含所有安全系數(shù)比較高的PHP代碼和數(shù)據(jù)的根目錄。在默認(rèn)情況下,這個(gè)目錄一般是入口代碼所在目錄的一個(gè)目錄: protected 。這個(gè)路徑可以通過在application configuration里設(shè)置 basePath來改變.普通用戶不應(yīng)該能夠訪問應(yīng)用文件夾里的內(nèi)
25、容。在 Apache HTTP 服務(wù)器里, 我們可以在這個(gè)文件夾里放一個(gè) .htaccess 文件. .htaccess的文件內(nèi)容是這樣的:deny from all應(yīng)用元件我們可以很容易的通過元件(component)設(shè)置和豐富一個(gè)應(yīng)用(Application)的功能。一個(gè)應(yīng)用可以有很多應(yīng)用元件,每個(gè)元件都執(zhí)行一些特定的功能。比如說,一個(gè)應(yīng)用可能通過CUrlManager 和 CHttpRequest部件來解析用戶的訪問。通過配置 components property of application, 我們可以個(gè)性化一些元件的類及其參數(shù)。比如說,我們可以配置CMemCache 元件以便用服務(wù)
26、器的內(nèi)存當(dāng)緩存。,array( . 'components'=>array( . 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port
27、39;=>11211, 'weight'=>40), ), ), ),)在上述例子中,我們將(緩存)cache元素(element)加在 元件 數(shù)組里. 這個(gè) 緩存(cache) 告訴我們這個(gè)元件的類是CMemCache 其服務(wù) 服務(wù)器(servers) 屬性應(yīng)該這樣初始化。要調(diào)用這個(gè)元件,用這個(gè)命令:Yii:app()->ComponentID,其中ComponentID是指這個(gè)元件的ID。 (比如 Yii:app()->cache).我們可以在應(yīng)用配置里,將enabled改為false來關(guān)閉一個(gè)元件。當(dāng)我們?cè)L問一個(gè)被禁止的元件時(shí),系統(tǒng)會(huì)返回一個(gè)NUL
28、L值。提示: 默認(rèn)情況下,應(yīng)用元件是根據(jù)需要而創(chuàng)建的。這意味著一個(gè)元件只有在被訪問的情況下才會(huì)創(chuàng)建。 因此,系統(tǒng)的整體性能不會(huì)因?yàn)榕渲昧撕芏嘣陆?。有些?yīng)用元件,(比如CLogRouter) 是不管用不用都要?jiǎng)?chuàng)建的。在這種情況下, 我們?cè)趹?yīng)用的配置文件里將這些元件的ID列上:preload。應(yīng)用的核心元件Yii預(yù)先定義了一套核心應(yīng)用組件提供Web應(yīng)用程序的常見功能。例如,request元件用于解析用戶請(qǐng)求和提供信息,如網(wǎng)址,cookie。在幾乎每一個(gè)方面,通過配置這些核心元件的屬性,我們都可以更改Yii的默認(rèn)行為。下面我們列出CWebApplication預(yù)先聲明的核心元件。·
29、assetManager: CAssetManager -管理發(fā)布私有asset文件。· authManager: CAuthManager - 管理基于角色控制 (RBAC)。· cache: CCache - 提供數(shù)據(jù)緩存功能。請(qǐng)注意,您必須指定實(shí)際的類(例如CMemCache, CDbCache ) 。否則,將返回空當(dāng)訪問此元件。· clientScript: CClientScript -管理客戶端腳本(javascripts and CSS)。· coreMessages: CPhpMessageSource -提供翻譯Yii框架使用的核心消息
30、。· db: CDbConnection - 提供數(shù)據(jù)庫連接。請(qǐng)注意,你必須配置它的connectionString屬性才能使用此元件。· errorHandler: CErrorHandler - 處理沒有捕獲的PHP錯(cuò)誤和例外。· messages: CPhpMessageSource - 提供翻譯Yii應(yīng)用程序使用的消息。· request: CHttpRequest - 提供和用戶請(qǐng)求相關(guān)的信息。· securityManager: CSecurityManager -提供安全相關(guān)的服務(wù),例如散列(hashing), 加密(encryp
31、tion)。· session: CHttpSession - 提供會(huì)話(session)相關(guān)功能。· statePersister: CStatePersister -提供全局持久方法(global state persistence method)。· urlManager: CUrlManager - 提供網(wǎng)址解析和某些函數(shù)。· user: CWebUser - 代表當(dāng)前用戶的身份信息。· themeManager: CThemeManager - 管理主題(themes)。應(yīng)用的生命周期當(dāng)處理一個(gè)用戶請(qǐng)求時(shí),一個(gè)應(yīng)用程序?qū)⒔?jīng)歷如下生命周
32、期:1. 建立類自動(dòng)加載器和錯(cuò)誤處理;2. 注冊(cè)核心應(yīng)用組件;3. 讀取應(yīng)用配置;4. 用CApplication:init()初始化應(yīng)用程序。o 讀取靜態(tài)應(yīng)用組件; 5. 觸發(fā)onBeginRequest事件;6. 處理用戶請(qǐng)求:o 解析用戶請(qǐng)求; o 創(chuàng)建控制器; o 執(zhí)行控制器; 7.觸發(fā)onEndRequest事件;控制器控制器是 CController 或者其子類的實(shí)例. 用戶請(qǐng)求應(yīng)用時(shí),創(chuàng)建控制器??刂破鲌?zhí)行請(qǐng)求action,action通常引入必要的模型并提供恰當(dāng)?shù)囊晥D。最簡單的action僅僅是一個(gè)控制器類方法,此方法的名字以action開始??刂破饔心J(rèn)的action。用戶請(qǐng)
33、求不能指定哪一個(gè)action執(zhí)行時(shí),將執(zhí)行默認(rèn)的action。缺省情況下,默認(rèn)的action名為index??梢酝ㄟ^設(shè)置CController:defaultAction改變默認(rèn)的action。下邊是最小的控制器類。因此控制器未定義任何action,請(qǐng)求時(shí)會(huì)拋出異常。class SiteController extends CController路由(Route)控制器和actions通過ID標(biāo)識(shí)的。控制器ID的格式: path/to/xyz對(duì)應(yīng)的類文件protected/controllers/path/to/XyzController.php, 相應(yīng)的 xyz應(yīng)該用實(shí)際的控制器名替換 (例
34、如 post 對(duì)應(yīng) protected/controllers/PostController.php). Action ID與 action 前輟構(gòu)成 action method。例如,控制器類包含一個(gè) actionEdit 方法, 對(duì)應(yīng)的 action ID就是 edit。注意: 在版本之前, 控制器ID的格式是 而不是 path/to/xyz。Users request for a particular controller and action in terms of route. A route is formed by concatenating a controller ID an
35、d an action ID separated by a slash. For example, the route post/edit refers to PostController and its edit action. And by default, the URL http:/hostname/index.php?r=post/edit would request for this controller and action.注意: By default, routes are case-sensitive. Since version 1.0.1, it is possible
36、 to make routes case-insensitive by setting CUrlManager:caseSensitive to be false in the application configuration. When in case-insensitive mode, make sure you follow the convention that directories containing controller class files are in lower case, and both controller map and action map are usin
37、g keys in lower case.Since version 1.0.3, an application can contain modules. The route for a controller action inside a module is in the format of moduleID/controllerID/actionID. For more details, see the section about modules.控制器實(shí)例化CWebApplication在處理一個(gè)新請(qǐng)求時(shí),實(shí)例化一個(gè)控制器。程序通過控制器的ID,并按如下規(guī)則確定控制器類及控制器類所在位置
38、· If CWebApplication:catchAllRequest is specified, a controller will be created based on this property, and the user-specified controller ID will be ignored. This is mainly used to put the application under maintenance mode and display a static notice page.· If the ID is found in CWebAppli
39、cation:controllerMap, the corresponding controller configuration will be used to create the controller instance.· If the ID is in the format of 'path/to/xyz', the controller class name is assumed to be XyzController and the corresponding class file is protected/controllers/path/to/XyzCo
40、ntroller.php. For example, a controller ID admin/user would be resolved as the controller class UserController and the class file protected/controllers/admin/UserController.php. If the class file does not exist, a 404 CHttpException will be raised.In case when modules are used (available since versi
41、on 1.0.3), the above process is slighly different. In particular, the application will check if the ID refers to a controller inside a module, and if so, the module instance will be created first followed by the controller instance.ActionAs aforementioned, an action can be defined as a method whose
42、name starts with the word action. A more advanced way is to define an action class and ask the controller to instantiate it when requested. This allows actions to be reused and thus introduces more reusability.To define a new action class, do the following:class UpdateAction extends CAction public f
43、unction run() / place the action logic here In order for the controller to be aware of this action, we override the actions() method of our controller class:class PostController extends CController public function actions() return array( 'edit'=>'', ); 如上所示,使用路徑別名 確定action類文件為prot
44、ected/controllers/post/UpdateAction.php.Writing class-based actions, we can organize an application in a modular fashion以模塊方式組織程序。例如,可以使用下邊的目錄結(jié)構(gòu)組織控制器代碼:protected/ controllers/ PostController.php UserController.php post/ CreateAction.php ReadAction.php UpdateAction.php user/ CreateAction.php ListActi
45、on.php ProfileAction.php UpdateAction.phpFilterFilter is a piece of code that is configured to be executed before and/or after a controller action executes. For example, an access control filter may be executed to ensure that the user is authenticated before executing the requested action; a perform
46、ance filter may be used to measure the time spent in the action execution.An action can have multiple filters. The filters are executed in the order that they appear in the filter list. A filter can prevent the execution of the action and the rest of the unexecuted filters.A filter can be defined as
47、 a controller class method. The method name must begin with filter. For example, the existence of the filterAccessControl method defines a filter named accessControl. The filter method must be of the signature:public function filterAccessControl($filterChain) / call $filterChain->run() to continu
48、e filtering and action executionwhere $filterChain is an instance of CFilterChain which represents the filter list associated with the requested action. Inside the filter method, we can call $filterChain->run() to continue filtering and action execution.A filter can also be an instance of CFilter
49、 or its child class. The following code defines a new filter class:class PerformanceFilter extends CFilter protected function preFilter($filterChain) / logic being applied before the action is executed return true; / false if the action should not be executed protected function postFilter($filterCha
50、in) / logic being applied after the action is executed To apply filters to actions, we need to override the CController:filters() method. The method should return an array of filter configurations. For example,class PostController extends CController . public function filters() return array( 'po
51、stOnly + edit, create', array( 'application.filters.PerformanceFilter - edit, create', 'unit'=>'second', ), ); The above code specifies two filters: postOnly and PerformanceFilter. The postOnly filter is method-based (the corresponding filter method is defined in CCont
52、roller already); while the PerformanceFilter filter is object-based. The path alias specifies that the filter class file is protected/filters/PerformanceFilter. We use an array to configure PerformanceFilter so that it may be used to initialize the property values of the filter object. Here the unit
53、 property of PerformanceFilter will be initialized as 'second'.Using the plus and the minus operators, we can specify which actions the filter should and should not be applied to. In the above, the postOnly should be applied to the edit and create actions, while PerformanceFilter should be a
54、pplied to all actions EXCEPT edit and create. If neither plus nor minus appears in the filter configuration, the filter will be applied to all actions.模型模型是 CModel 或其子類的實(shí)例. 模型用于保持?jǐn)?shù)據(jù)以及和數(shù)據(jù)相關(guān)的業(yè)務(wù)規(guī)則.模型描述了一個(gè)單獨(dú)的數(shù)據(jù)對(duì)象.它可以是數(shù)據(jù)表中的一行數(shù)據(jù)或者用戶輸入的一個(gè)表單.數(shù)據(jù)中的各個(gè)字段都描述了模型的一個(gè)屬性.這些屬性都有一個(gè)標(biāo)簽,都可以被一套可靠的規(guī)則驗(yàn)證.Yii 從表單模型和 active rec
55、ord 實(shí)現(xiàn)了兩種模型. 它們都繼承自基類 CModel.表單模型是CFormModel的實(shí)例.表單模型用于保存通過收集用戶輸入得來的數(shù)據(jù).這樣的數(shù)據(jù)通常被收集,使用,然后被拋棄.例如,在一個(gè)登錄頁面上,我們可以使用一個(gè)表單模型來描述諸如用戶名,密碼這樣的由最終用戶提供的信息.若想了解更多,請(qǐng)參閱 Working with FormActive Record (AR) 是一種面向?qū)ο箫L(fēng)格的,用于抽象數(shù)據(jù)庫訪問的設(shè)計(jì)模式.任何一個(gè) AR 對(duì)象都是 CActiveRecord 或其子類的實(shí)例, 它描述的數(shù)據(jù)表中的單獨(dú)一行數(shù)據(jù).這行數(shù)據(jù)中的字段被描述成 AR 對(duì)象的一個(gè)屬性. 關(guān)于 AR 的更多信息可以在 Active Record 中找到.視圖視圖是一個(gè)包含了主要的用戶交互元素的PHP腳本.他可以包含PHP語句,但是我們建議這些語句不要去改變數(shù)據(jù)模型,且最好能夠保持其單純性(單純作為視圖)!為了實(shí)現(xiàn)邏輯和界面分離,大部分的邏輯應(yīng)該被放置于控制器或模型里,而不是視圖里.視圖有一個(gè)當(dāng)其被渲染(render)時(shí)用于用于校驗(yàn)的名稱.視圖的名稱與其腳本名稱是一樣的.例如:視圖 edit 的名稱出自一個(gè)名為 edit.php 的腳本文件.通過 CController:render() 調(diào)用視圖的名稱可以渲染一個(gè)視圖.這個(gè)方法將在 protect
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)期學(xué)習(xí)總結(jié)模板
- 合伙開礦合同
- 2025年舟山b2貨運(yùn)資格證考試題庫
- 《正壓式呼吸器》課件
- 2025年揭陽交通運(yùn)輸從業(yè)資格證怎樣考試
- 2025年烏魯木齊貨運(yùn)從業(yè)資格證考試題庫答案解析大全
- 2025年江西貨運(yùn)從業(yè)資格證考試題目答案及解析
- 2025年蘭州貨運(yùn)從業(yè)資格證考試模擬考試題及答案
- 2025年錫林郭勒盟貨運(yùn)考試題庫
- 《壩上草原風(fēng)光》課件
- 物流行業(yè)疫情應(yīng)急處理及防控措施預(yù)案
- 江南大學(xué)《自然語言處理》2022-2023學(xué)年第一學(xué)期期末試卷
- 第十屆CAD制圖大賽試題
- 2024年世界職業(yè)院校技能大賽中職組“法律實(shí)務(wù)組”賽項(xiàng)考試題庫(含答案)
- 青島科技大學(xué)《憲法學(xué)》2021-2022學(xué)年期末試卷
- 2025年會(huì)計(jì)專業(yè)考試初級(jí)經(jīng)濟(jì)法基礎(chǔ)試卷及解答參考
- 2024年徐州市中考語文試卷(附答案解析)
- 公文寫作題庫(500道)
- 2023年《安徽大學(xué)學(xué)生手冊(cè)》在線考試學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 一封雞毛信的故事課件
- 變形桿菌實(shí)驗(yàn)活動(dòng)風(fēng)險(xiǎn)評(píng)估報(bào)告
評(píng)論
0/150
提交評(píng)論