視圖
視圖主要是一個包含用戶介面元素的 PHP 腳本.他可以包含 PHP 語句,但是我們建議這些語句不要去改變資料模型,且最好能夠保持其單純性 (單純作為視圖)。為了實現邏輯和界面分離,大段的邏輯應該被放置於控制器或模型中,而不是視圖中。
視圖有一個名字,當呈現 (render) 時,名字會被用於識別視圖腳本檔案。視圖的名稱與其視圖腳本名稱是一樣的,例如:視圖 edit
的名稱出自一個名為 edit.php
的腳本檔案。要呈現時,需通過傳遞視圖的名稱來調用 CController::render()。這個方法將在 protected/views/ControllerID
目錄下尋找對應的視圖檔案。
在視圖腳本內部,我們可以通過 $this
來存取控制器實體.我們可以在視圖裡以 $this->propertyName
的方式 拉取
控制器的任何屬性.
我們也可以用以下 推送
的方式傳遞資料到視圖裡:
$this->render('edit', array( 'var1'=>$value1, 'var2'=>$value2, ));
在以上的方式中, render() 方法將提取數組的第二個參數到變量裡。其產生的結果,是在視圖腳本裡,我們可以直接存取變數 $var1
和 $var2
。
佈局
佈局是一種用來修飾視圖的特殊的視圖檔案,它通常包含了用戶界面中通用的一部分視圖。例如:佈局可以包含 header 和 footer 的部分,然後把內容嵌入其間。
......header here...... <?php echo $content; ......footer here......
其中的 $content
則儲存了內容視圖的呈現結果。
當使用 render() 時,應用程式是看不到布局的。視圖腳本 protected/views/layouts/main.php
是預設的佈局檔案,這可以通過改變 CWebApplication::layout 或 CWebApplication::layout 自行定義。要呈現一個不帶佈局的視圖,則需調用 renderPartial() 。
小工具
小工具是 CWidget 或其子類別的實體,主要是用於表現資料的元件。小工具通常內嵌於一個視圖來產生一些複雜而獨立的用戶界面,例如:一個日曆小工具可用於呈現一個複雜的日曆界面。小工具使用戶界面重用性更高。
我們可以按如下視圖腳本來使用一個小工具:
$this->beginWidget('path.to.WidgetClass'); ...可能會由小工具獲取的內容主體... <?php $this->endWidget();
或者
$this->widget('path.to.WidgetClass');
後者用於不需要任何主體內容的元件.
小工具可通過配置來設定它的關,這是通過調用 CBaseController::beginWidget 或 CBaseController::widget 設置其初始化的屬性值來完成。例如:當使用 CMaskedTextField 小工具時,我們想指定被使用的遮罩,我們通過傳遞一個帶有這些屬性初始化值的陣列來實現。這裡的陣列的鍵是屬性的名稱,而陣列的值則是小工具屬性所對應的值。正如以下所示 :
$this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' ));
繼承 CWidget 並覆蓋其 init() 和 run() 方法,可以定義一個新的小工具:
class MyWidget extends CWidget { public function init() { // 此方法會被 CController::beginWidget() 調用 } public function run() { // 此方法會被 CController::endWidget() 調用 } }
小工具可以像一個控制器一樣擁有它自己的視圖。預設情況下,小工具的視圖檔案位於包含了小工具類別檔案目錄的 views
子目錄之下。這些視圖可以通過調用 CWidget::render() 來呈現,這一點和控制器很相似.唯一不同的是,小工具的視圖沒有佈局支援。另外,小工具視圖中的 $this
指向小工具實體而不是控制器實體。
系統視圖
系統視圖的呈現通常用於展示 Yii 的錯誤和日誌訊息。例如,當用戶請求一個不存在的控制器或動作時,Yii 會拋出一個異常來解釋這個錯誤。這時, Yii 就會使用一個特殊的系統視圖來顯示此錯誤。
系統視圖的命名遵從了一些規則,比如像 errorXXX
這樣的名稱就是用於呈現展示錯誤號 XXX
的 CHttpException 的視圖。例如,如果 CHttpException 拋出一個 404 錯誤,那麼 error404
就會被顯示。
在 framework/views
下, Yii 提供了一系列預設的系統視圖,他們可以通過在 protected/views/system
下建立同名視圖檔案進行自定。