首頁  >  文章  >  後端開發  >  PHP開發框架Yii Framework教學(2) Yii Web應用基礎

PHP開發框架Yii Framework教學(2) Yii Web應用基礎

黄舟
黄舟原創
2017-01-21 09:29:081264瀏覽

有了前面的“Hello,World”, Yii應用開發似乎很容易,別這麼快下結論:-),想起多年以前剛開始使用MFC開發時,寫完第一個Hello,World之後,還是覺得無從下手,不知道怎麼開始寫MFC應用,這是因為MFC提供了大量的類別庫,如果對MFC應用程式框架和其提供的主要類別庫不事先了解的話,基本上就沒辦法寫應用,學習Yii Framework ,也要先了解組成Yii應用的幾個主要組成部分也一些常用的類別。

在前面教程說過Yii採用MVC(模型-視圖-控制器),並介紹了入口腳本和主應用程式類別 CWebApplication類別。應用類別的實例由 入口腳本 建立為一個物件(Singleton)。這個應用程式單例物件可以在任何地方透過 Yii::app() 存取。

主應用程式實例(CWebApplication)

預設情況下,應用程式是一個 CWebApplication 的實例。要自訂它,我們通常需要提供一個設定檔 (或陣列) 以建立應用程式實例時初始化其屬性值。自訂應用程式的另一種方式是繼承 CWebApplication。

配置是一個鍵值對數組。每個鍵代表應用實例中某屬性的名字,每個值即對應屬性的初始值。 例如 ,如下的配置設定了套用的 name 和 defaultController 屬性。

array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)

我們通常在一個單獨的PHP 腳本(e.g.protected/config/main.php)中保存這些配置。在腳本中, 我們透過以下方式傳回此配置陣列:

return array(...);要套用此配置,我們將設定檔的名字作為參數傳遞給應用程式的建構器,或像下面這樣傳遞到Yii ::createWebApplication() 。這通常在 入口腳本 中完成:

$app=Yii::createWebApplication($configFile);應用元件

應用的功能可以透過其靈活的元件結構 輕易地自訂或增強。應用程式管理了一系列應用元件,每個元件實現一特定功能。 例如,應用程式透過 CUrlManager 和 CHttpRequest 的協助解析來自使用者的請求。

透過配置應用的 components 屬性, 我們可以自訂應用程式中使用的任何元件類別及其屬性值。例如,我們可以設定應用的 CMemCache 元件, 這樣它就可以使用多個 memcache 伺服器實作快取:

array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),

)如上所示,我們在 components 陣列中新增了 cache 元素。 cache 元素表示此元件的類別是 CMemCache, 他的servers 屬性應依此初始化。

要存取一個應用元件,使用 Yii::app()->ComponentID ,其中的 ComponentID 是指元件的ID( 例如Yii::app()->cache)。

應用的元件可以透過在其配置中設定 enabled 為 false 來停用。當我們存取被禁用的元件時將傳回 Null。

CWebApplication的的生命週期

當處理使用者請求時,應用程式將經歷以下宣告週期:

透過CApplication::preinit() 預先初始化應用;註冊

設定類別的自動裝載器和錯誤處理;

核心類別元件;

載入應用程式配置;

透過CApplication::init() 初始化應用程式:

註冊應用行為;

載入靜態應用元件;

解析使用者請求;

建立控制器;

運行控制器;

觸發onEndRequest 事件。

CController控制類別

控制器是 CController 或其子類別的實例。它在當用戶請求時由應用程式創建。 當一個控制器運行時,它執行所要求的動作,動作通常會引入所必要的模型並渲染相應的視圖。 動作 的最簡形式,就是一個名字以 action 開頭的控制器類別方法。

控制器通常有一個預設的動作。當使用者的請求未指定要執行的動作時,預設動作將會執行。 預設情況下,預設的動作名為index。它可以透過設定 CController::defaultAction 修改。

如下是一個控制器類別所需的最簡程式碼 。由於此控制器未定義任何動作,因此對它的請求將拋出一個異常。

class SiteController extends CController
{
}

路由

使用者造訪網頁的URL的基本格式為/index.php?r=XController/YAction , 對應到程式碼為protected目錄下controllers子目錄下的XController.php 中定義的的類別XController的YAction 方法。 例如,路由 post/edit 代表 PostController 及其 edit 動作。預設情況下,URL http://hostname/index.php?r=post/edit 即請求此控制器和動作。 模型 (CModel類別) 模型是 CModel 或其子類別的實例。模型用於保持資料以及與其相關的業務邏輯.

Yii 實現了兩種類型的模 型:表單模型和 Active Record。二者均繼承於相同的基底類別 CModel。

表單模型是 CFormModel 的實例。表單模型用於保持從使用者的輸入獲取的資料。 這些數據經常被獲取,使用,然後丟棄。例如,在一個登入頁面中, 我們可以使用表單模型來表示由最終使用者提供的使用者名稱和密碼資訊。更多詳情,請參考 使用表單。

Active Record (AR) 是一種用於透過面向對 象的風格抽象化資料庫存取的設計模式。 每個 AR 物件是一個CActiveRecord 或其子類別的實例。代表資料表中的一行。 行中的 欄位對應 AR 物件中的屬性。

視圖View

視圖是一個包含了主要的使用者互動元素的PHP腳本。他可以包含PHP語句,但是我們建議這些語句不要去改變資料模型,且最好能夠保持其單純性(單純作為視圖)。為了實現邏輯和介面分離,大段的邏輯應該被放置於控制器或模型中,而不是視圖中。

和Windows應用類比的話,View類似於Windows應用的Form類,其中使用可以控制來定義UI,控制項對應到Yii框架成為CWidget,它是一個主要用於表現資料的元件。小物件通常內嵌於一個視圖來產生一些複雜而獨立的使用者介面.例如,一個日曆小物件可用於渲染一個複雜的日曆介面.小物件使用戶介面更加可重複使用。

和Asp.Net類似 的Masterpage,Yii中稱為Layout(版面)。

佈局是一種用來修飾視圖的特殊的視圖文件.它通常包含了用戶界面中通用 的一部分視圖.例如:佈局可以包含h​​eader和footer的部分,然後把內容嵌入其間。

......header here......

......footer here......其中的$content 則儲存了內容視圖的渲染結果.

當使用render () 時,佈局被隱式應用.視圖腳本protected/views/layouts/main.php 是預設的佈局檔.這可以透過改變CWebApplication::layout 或CWebApplication::layout 來自訂。若要渲染一個不帶佈局的視圖,則需呼叫 renderPartial() 。

以上介紹了Yii應用的幾個重要的組成部分,可以參考“Hello,World”示例,並且Yii應用的文件結構也有缺省的定義,下面為應用的缺省目錄結構:

PHP開發框架Yii Framework教學(2) Yii Web應用基礎

在正式開發Yii應用前, 先粗略看一下Yii提供的類別庫http://www.yiiframework.com/doc/api/ ,下圖列出來Yii Framework提供的類別庫的套件定義:

PHP開發框架Yii Framework教學(2) Yii Web應用基礎

只有先了解Yii應用的主要組成部分和每個類別包支援的主要功能,才能後續比較靈活的使用Yii來開發Web應用。

以上就是PHP開發框架Yii Framework教學(2) Yii Web應用基礎的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn