yii將數據操作放在widget合理嗎

yii將數據操作放在widget合理嗎

有的人會選擇制作多個layout,在不同地方切換layout,但這樣代碼的重用性沒有發揮出來,而且不夠靈活。YII里面有一個很方便的機制來解決這一問題,那就是 —— widget,小部件是也。? ? ? ? ? ? ? ? ? ? ? (推薦學習:yii框架

yii里面有一些自帶的widget,他們放在web.widgets和zii.widgets下面,比如有我們常用的CLinkPager、CMenu大家可以看一看。

要自己擴展widget,根據手冊上的介紹,需要繼承CWidget,并且覆蓋run()方法。我們來開始擴展第一個widget:

創建widget存放目錄: 在application(默認是protected)下創建目錄widgets,用來存放widget類,然后創建widgets.views目錄,用來存放widget的視圖文件。

創建widget類: 在application.widgets下面創建一個名為TestWidget.php的文件,命名沒太大講究,保證唯一性,見名知意即可。在里面加入以下代碼:

class?TestWidget?extends?CWidget { ????public?$datetime?=?'';?  ????public?function?run() ????{ ????????$datetime?=?empty($this->datetime)???date('Y-m-d?H:i:s')?:?$this->datetime; ????????$this->render('test',?array('datetime'=>$datetime)); ????} }

解釋一下這段代碼:按照規則,類名TestWidget與文件名TestWidget.php相同,類TestWidget需要繼承CWidget,然后重寫(rewrite)run()方法,該方法會在widget被渲染是調用。

在run()方法里調用$this->render()方法渲染test視圖,將變量$datetime傳遞到視圖(參見控制器的視圖渲染)。可以在里面查詢數據庫,進行各種操作,將運算的結果傳入視圖。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享