ThinkPHP3.1的Widget新用法
ThinkPHP3.0版本的Widget對(duì)Action和View的支持力度是相對(duì)不夠的,僅能夠?qū)崿F(xiàn)基本的模板渲染輸出。而3.1版本的發(fā)布帶來的多層MVC功能,給我們實(shí)現(xiàn)Widget的方式帶來了新的思路,且看是如何實(shí)現(xiàn)吧。
由于ThinkPHP3.1增加了對(duì)多層MVC的支持,因此3.1版本可以支持多層的控制器功能,由此我們就可以在控制器層再增加一層:Widget層。
首先,還是在項(xiàng)目的Lib目錄下面創(chuàng)建一個(gè)Widget目錄,并且創(chuàng)建一個(gè)TestWidget類(Lib/Widget/TestWidget.class.php)如下:
class TestWidget extends Action{
public function hello($name=''){
echo ("hello,".$name."!");
}
}
我們看到TestWidget和之前的區(qū)別是沒有繼承Widget類,而是直接繼承了Action類,這就代表著在TestWidget中可以直接調(diào)用Action的方法,包括對(duì)模板的渲染輸出。
定義完成后,我們?cè)趺凑{(diào)用這個(gè)Widget呢?用W方法肯定行不通了,這次需要R方法出場(chǎng)了。
R方法的作用是遠(yuǎn)程調(diào)用模塊的操作,但是3.1賦予了它新的作用,可以支持調(diào)用所有控制器層的操作方法,所以,我們可以在模板中這樣來調(diào)用Widget:
{:R('Test/hello',array('ThinkPHP'),'Widget')}
就可以實(shí)現(xiàn)在頁(yè)面中的某個(gè)區(qū)域輸出:
hello,ThinkPHP!
由于除了Action控制器之外的其他控制器層是無法直接通過URL訪問的,所以這個(gè)Widget方法只能通過R方法在內(nèi)部調(diào)用才可以。
你可以在TestWidget類中調(diào)用Model來輸出其他數(shù)據(jù),如果需要渲染自身的模板,則可以直接調(diào)用display方法就行了。
class TestWidget extends Action{
public function hello($name=''){
$this->assign('name',$name);
$this->display('Test:hello');
}
}
我們?cè)陧?xiàng)目的Tpl/Test/ 目錄下面創(chuàng)建一個(gè)hello(Tpl/Test/hello.html)模板文件,添加輸出:
Hello,{$name}!
如果你希望和之前的Widget一樣,把模板文件放到當(dāng)前目錄下面,則可以使用:
class TestWidget extends Action{
public function hello($name=''){
$this->assign('name',$name);
$this->display(dirname(__FILE__).'/Test/hello.html');
}
}
這個(gè)時(shí)候,你就可以把剛才定義的hello模板文件放入Widget/Test/ 目錄下面了。
- ThinkPHP的Widget擴(kuò)展實(shí)例
- thinkPHP下的widget擴(kuò)展用法實(shí)例分析
- ThinkPHP中Widget擴(kuò)展的兩種寫法及調(diào)用方法詳解
- thinkPHP5框架中widget的功能與用法詳解
- Thinkphp 框架擴(kuò)展之行為擴(kuò)展原理與實(shí)現(xiàn)方法分析
- Thinkphp 框架擴(kuò)展之標(biāo)簽庫(kù)驅(qū)動(dòng)原理與用法分析
- Thinkphp 框架擴(kuò)展之?dāng)?shù)據(jù)庫(kù)驅(qū)動(dòng)常用方法小結(jié)
- Thinkphp 框架擴(kuò)展之類庫(kù)擴(kuò)展操作詳解
- Thinkphp 框架擴(kuò)展之Widget擴(kuò)展實(shí)現(xiàn)方法分析
相關(guān)文章
Windows下部署Apache+PHP+MySQL運(yùn)行環(huán)境實(shí)戰(zhàn)
本來嘛,部署PHP沒什么復(fù)雜,找各種版本著實(shí)頭疼了一下。2012-08-08
laravel 5.4中實(shí)現(xiàn)無限級(jí)分類的方法示例
最近在工作中遇到一個(gè)需求,是要在laravel 5.4中實(shí)現(xiàn)無限級(jí)分類,但發(fā)現(xiàn)網(wǎng)上這個(gè)的資料較少,所以只能自己來實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于在laravel 5.4中實(shí)現(xiàn)無限級(jí)分類的方法示例,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
Yii2 中實(shí)現(xiàn)單點(diǎn)登錄的方法
這篇文章主要介紹了Yii2 中實(shí)現(xiàn)單點(diǎn)登錄的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
php中使用array_filter()函數(shù)過濾空數(shù)組的實(shí)現(xiàn)代碼
這篇文章主要介紹了php中使用array_filter()函數(shù)過濾空數(shù)組的實(shí)現(xiàn)代碼,這是瀏覽PHP手冊(cè)時(shí)無意發(fā)意的一個(gè)有意思的array_filter()函數(shù)用法,需要的朋友可以參考下2014-08-08
php使用array_chunk函數(shù)將一個(gè)數(shù)組分割成多個(gè)數(shù)組
這篇文章主要介紹了php使用array_chunk函數(shù)將一個(gè)數(shù)組分割成多個(gè)數(shù)組,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12

