YII框架分析筆記7 掛件widget

2021-06-07 04:38:39 字數 1704 閱讀 7044

widget好處是方面重用和靈活移動。cwidget是所有的widge父類,同時它又是是cbasecontroller的子類,cwidget提供了類似ccontroller中的一些方法,但render()方法渲染的時候不帶layout,而且渲染的時候$this指得是cwidget物件,而不是ccontroller物件,ccontroller物件可以通過其中的getcontroller()方法獲取,用其子類中需要對init()和run()方法過載以定製不同的掛件。

cbasecontroller提供widget()方法以及beginwidget()、endwidget()方法載入掛件。

public function widget($classname,$properties=array(),$captureoutput=false)

else }

public function createwidget($classname,$properties=array())

上面是直接載入掛件方法,通過第三個引數來決定是返回內容還是直接輸出內容,widget是通過cwidgetfactory來建立。

以**常見的麵包屑導航為例,下面是視**件中的**

$this->breadcrumbs=array(

'users',

);$this->widget('zii.widgets.cbreadcrumbs', array(

'links'=>$this->breadcrumbs,

));

通過cbasecontroller的widget()方法,建立cbreadcrumbs掛件,初始化後,執行run()方法渲染內容。

/**

* renders the content of the portlet.

*/public function run()

echo implode($this->separator,$links);

echo chtml::closetag($this->tagname);

}

另外乙個多級布局例子來說明beginwidget()、endwidget()的用法。在腳手架生成的**中,layout下的column1中的**

<?php $this->begincontent('//layouts/main'); ?>

<?php echo $content; ?>

<?php $this->endcontent(); ?>

**中begincontent($view=null,$data=array())其實是對beginwidget('ccontentdecorator',array('view'=>$view, 'data'=>$data))再次封裝,建立內容裝飾掛件ccontentdecorator,把主檢視傳進去,

與widget()的不同點是通過$this->_widgetstack=$widget和$widget=array_pop($this->_widgetstack)),應用棧來操作掛件,在兩個方法中間的內容通過php內容輸出緩衝函式捕獲,所有上面**的作用是將<?php echo $content; ?>

以變數($content)的方式傳給main.php中。

Yii框架的掛件的使用

參考文件 應用的場景 頁面的某一部分多次被使用 最簡單的一種應用 但是這種寫法是被棄了 大佬選擇了寫乙個php檔案,require 載入的模式 掛件的寫法 useyii base widget classreporttagcontroller extendswidget public functio...

YII框架分析筆記1 YII執行流程

yii整體執行流程直觀,具體由以下步驟 1 程式入口檔案index.php載入yii框架引導程式 bootstrap 檔案yii.php,載入配置檔案以及其他自定義配置。2 yii.php中yii類繼承了yiibase,主要封裝框架的一些通用方法,比如自動載入 建立元件 核心類路徑對映 記錄日誌以及...

YII框架分析筆記9 url路由

curlmanager初始化的時候如果url格式 預設是get格式 如果是path格式,則通過配置中的rule陣列建立路由規則物件,根據路由規則獲取內部路由,當路由都不匹配的時候會根據設定的usestrictparsing引數決定丟擲乙個404錯誤合適返回 pathinfo。如果不是path格式的話...