編程學習網 > PHP技術 > Yii1 > Yii框架官方指南系列9——基礎知識:視圖
2014
11-07

Yii框架官方指南系列9——基礎知識:視圖

視圖是一個包含了主要的用戶交互元素的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?下創建同名視圖文件進行自定義。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取