視圖是一個包含了主要的用戶交互元素的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。
1. 布局
布局是一種用來修飾視圖的特殊的視圖文件.它通常包含了用戶界面中通用的一部分視圖.例如:布局可以包含header和footer的部分,然后把內容嵌入其間.
......header here...... <?php echo $content; ?> ......footer here......
其中的?$content
?則儲存了內容視圖的渲染結果.
當使用?render()?時,布局被隱式應用。視圖腳本?protected/views/layouts/main.php
?是默認的布局文件.這可以通過改變?CWebApplication::layout?或者?CWebApplication::layout?進行自定義。要渲染一個不帶布局的視圖,則需調用renderPartial()?。
2. 小物件
小物件是?CWidget?或其子類的實例.它是一個主要用于表現數據的組件。小物件通常內嵌于一個視圖來產生一些復雜而獨立的用戶界面。例如,一個日歷小物件可用于渲染一個復雜的日歷界面。小物件使用戶界面更加可復用。
我們可以按如下視圖腳本來使用一個小物件:
<?php $this->beginWidget('path.to.WidgetClass'); ?> ...可能會由小物件獲取的內容主體... <?php $this->endWidget(); ?>
或者
<?php $this->widget('path.to.WidgetClass'); ?>
后者用于不需要任何 body 內容的組件。
小物件可通過配置來定制它的表現.這是通過調用?CBaseController::beginWidget?或?CBaseController::widget?設置其初始化屬性值來完成的。例如,當使用?CMaskedTextField?小物件時,我們想指定被使用的 mask (可理解為一種輸出格式),我們通過傳遞一個攜帶這些屬性初始化值的數組來實現。這里的數組的鍵是屬性的名稱,而數組的值則是小物件屬性所對應的值。正如以下所示 :
<?php $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
指向小物件實例而不是控制器實例。
3. 系統視圖
系統視圖的渲染通常用于展示 Yii 的錯誤和日志信息。例如,當用戶請求來自一個不存在的控制器或動作時,Yii 會拋出一個異常來解釋這個錯誤, 這時,Yii 就會使用一個特殊的系統視圖來顯示此錯誤。
系統視圖的命名遵從了一些規則。比如像?errorXXX
?這樣的名稱就是用于渲染展示錯誤號?XXX
?的?CHttpException?的視圖。例如,如果?CHttpException?拋出一個 404錯誤,那么?error404
?就會被顯示。
在?framework/views
?下, Yii 提供了一系列默認的系統視圖。他們可以通過在?protected/views/system
?下創建同名視圖文件進行自定義。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.wangchenghua.com/post/1294/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料