視圖

視圖主要是一個包含用戶介面元素的 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::layoutCWebApplication::layout 自行定義。要呈現一個不帶佈局的視圖,則需調用 renderPartial()

小工具

小工具是 CWidget 或其子類別的實體,主要是用於表現資料的元件。小工具通常內嵌於一個視圖來產生一些複雜而獨立的用戶界面,例如:一個日曆小工具可用於呈現一個複雜的日曆界面。小工具使用戶界面重用性更高。

我們可以按如下視圖腳本來使用一個小工具:

<?php $this->beginWidget('path.to.WidgetClass'); ?>
...可能會由小工具獲取的內容主體...
<?php $this->endWidget(); ?>

或者

<?php $this->widget('path.to.WidgetClass'); ?>

後者用於不需要任何主體內容的元件.

小工具可通過配置來設定它的關,這是通過調用 CBaseController::beginWidgetCBaseController::widget 設置其初始化的屬性值來完成。例如:當使用 CMaskedTextField 小工具時,我們想指定被使用的遮罩,我們通過傳遞一個帶有這些屬性初始化值的陣列來實現。這裡的陣列的鍵是屬性的名稱,而陣列的值則是小工具屬性所對應的值。正如以下所示 :

<?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 指向小工具實體而不是控制器實體。

系統視圖

系統視圖的呈現通常用於展示 Yii 的錯誤和日誌訊息。例如,當用戶請求一個不存在的控制器或動作時,Yii 會拋出一個異常來解釋這個錯誤。這時, Yii 就會使用一個特殊的系統視圖來顯示此錯誤。

系統視圖的命名遵從了一些規則,比如像 errorXXX 這樣的名稱就是用於呈現展示錯誤號 XXXCHttpException 的視圖。例如,如果 CHttpException 拋出一個 404 錯誤,那麼 error404 就會被顯示。

framework/views 下, Yii 提供了一系列預設的系統視圖,他們可以通過在 protected/views/system 下建立同名視圖檔案進行自定。

$Id$