首頁  >  文章  >  後端開發  >  關於ThinkPHP3.1中Widget的用法

關於ThinkPHP3.1中Widget的用法

不言
不言原創
2018-06-19 16:12:511538瀏覽

這篇文章主要介紹了ThinkPHP3.1的Widget新用法,需要的朋友可以參考下

ThinkPHP3.0版本的Widget對Action和View的支持力度是相對不夠的,僅能夠實現基本的模板渲染輸出。而3.1版本的發布帶來的多層MVC功能,為我們實作Widget的方式帶來了新的思路,且看是如何實現吧。

由於ThinkPHP3.1增加了對多層MVC的支持,因此3.1版本可以支援多層的控制器功能,由此我們就可以在控制器層再增加一層:Widget層。

首先,還是在專案的Lib目錄下方建立一個Widget目錄,並且建立一個TestWidget類別(Lib/Widget/TestWidget.class.php)如下:

#
class TestWidget extends Action{
  public function hello($name=''){
    echo ("hello,".$name."!");
  }
 }

我們看到TestWidget和之前的區別是沒有繼承Widget類,而是直接繼承了Action類,這就代表著在TestWidget中可以直接調用Action的方法,包括對模板的渲染輸出。

定義完成後,我們要怎麼呼叫這個Widget呢?用W方法肯定行不通了,這次需要R方法出場了。
R方法的作用是遠端呼叫模組的操作,但是3.1賦予了它新的作用,可以支援呼叫所有控制器層​​的操作方法,所以,我們可以在模板中這樣來呼叫Widget:

{:R('Test/hello',array('ThinkPHP'),'Widget')}

就可以實作在頁面中的某個區域輸出:

hello,ThinkPHP!

由於除了Action控制器以外的其他控制器層是無法直接透過URL存取的,所以這個Widget方法只能透過R方法在內部呼叫才可以。

你可以在TestWidget類別中呼叫Model來輸出其他數據,如果需要渲染自身的模板,則可以直接呼叫display方法就行了。

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display('Test:hello');
  }
 }

我們在專案的Tpl/Test/ 目錄下方建立一個hello(Tpl/Test/hello.html)範本文件,新增輸出:

Hello,{$name}!

如果你希望和之前的Widget一樣,把範本檔案放到目前目錄下面,可以使用:

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display(dirname(__FILE__).'/Test/hello.html');
  }
 }

這時候,你就可以把剛才定義的hello模板檔放入Widget/Test/ 目錄下面了。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

基於php匯出到Excel或CSV的方法

##

以上是關於ThinkPHP3.1中Widget的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn