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

來源:互聯網
上載者:User



視圖是一個包含了主要的使用者互動元素的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 下建立同名視圖檔案進行自訂。

以上就是Yii架構官方指南系列9——基礎知識:視圖的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.