thinkPHP3.2.2框架行為擴(kuò)展及demo示例_第1頁
thinkPHP3.2.2框架行為擴(kuò)展及demo示例_第2頁
thinkPHP3.2.2框架行為擴(kuò)展及demo示例_第3頁
thinkPHP3.2.2框架行為擴(kuò)展及demo示例_第4頁
thinkPHP3.2.2框架行為擴(kuò)展及demo示例_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第thinkPHP3.2.2框架行為擴(kuò)展及demo示例本文實例講述了thinkPHP3.2.2框架行為擴(kuò)展。分享給大家供大家參考,具體如下:

首先介紹一下行為擴(kuò)展類,本人愚鈍,還是借用tp手冊上的來說:

行為(Behavior)是一個比較抽象的概念,你可以想象成在應(yīng)用執(zhí)行過程中的一個動作或者處理,在框架的執(zhí)行流程中,各個位置都可以有行為產(chǎn)生,例如路由檢測是一個行為,靜態(tài)緩存是一個行為,用戶權(quán)限檢測也是行為,大到業(yè)務(wù)邏輯,小到瀏覽器檢測、多語言檢測等等都可以當(dāng)做是一個行為,甚至說你希望給你的網(wǎng)站用戶的第一次訪問彈出Hello,world!這些都可以看成是一種行為,行為的存在讓你無需改動框架和應(yīng)用,而在外圍通過擴(kuò)展或者配置來改變或者增加一些功能。

而不同的行為之間也具有位置共同性,比如,有些行為的作用位置都是在應(yīng)用執(zhí)行前,有些行為都是在模板輸出之后,我們把這些行為發(fā)生作用的位置稱之為標(biāo)簽(位),當(dāng)應(yīng)用程序運(yùn)行到這個標(biāo)簽的時候,就會被攔截下來,統(tǒng)一執(zhí)行相關(guān)的行為,類似于AOP編程中的“切面”的概念,給某一個切面綁定相關(guān)行為就成了一種類AOP編程的思想。

那下面就入正題,講解一下行為(Behavior)的實例

讓行為工作有兩種方式:

1.通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為

2.通過\Think\Hook::add(name,class_namespace)注冊一個行為,然后觸發(fā)(注冊函數(shù)必須在觸發(fā)函數(shù)之前)

在我們講解實例之前,很有必要先講講行為是怎么觸發(fā)的。

行為觸發(fā)靠的是\Think\Hook::listen(name)方法,那方法里面到底做了什么,我們先看看源碼:

*監(jiān)聽標(biāo)簽的插件

*@paramstring$tag標(biāo)簽名稱

*@parammixed$params傳入?yún)?shù)

*@returnvoid

*addbyyangligao2014/8/25

*listen個人覺得方法名稱取得不怎么好理解,看程序中就知道這個方法實際上就是看$tags中有沒有參數(shù)中的tag

*如果有,就觸發(fā)之;

*如果沒有,你懂的,過之(至少程序中是沒有做操作)。

staticpublicfunctionlisten($tag,$params=NULL){

if(isset(self::$tags[$tag])){

if(APP_DEBUG){

G($tag.'Start');

trace('['.$tag.']--START--','','INFO');

foreach(self::$tags[$tag]as$name){

APP_DEBUGG($name.'_start');

$result=self::exec($name,$tag,$params);

if(APP_DEBUG){

G($name.'_end');

trace('Run'.$name.'[RunTime:'.G($name.'_start',$name.'_end',6).'s]','','INFO');

if(false===$result){

//如果返回false則中斷插件執(zhí)行

return;

if(APP_DEBUG){//記錄行為的執(zhí)行日志

trace('['.$tag.']--END--[RunTime:'.G($tag.'Start',$tag.'End',6).'s]','','INFO');

//return;//thinkphp原始的樣式

return$result;//筆者^_^自己添加的

這個方法里面記錄行為的一些運(yùn)行狀態(tài)的值,函數(shù)最后一點(diǎn)筆者做了一點(diǎn)修改,只是讓這個方法有了一份返回值(而非返回空)

最重要的地方就是

$result=self::exec($name,$tag,$params);

這個地方就開始執(zhí)行所謂的行為了,先看看exec方法的源碼

*執(zhí)行某個插件

*@paramstring$name插件名稱

*@paramstring$tag方法名(標(biāo)簽名)

*@paramMixed$params傳入的參數(shù)

*@returnvoid

*addbyyangligao2014/8/25

*exec執(zhí)行文件

staticpublicfunctionexec($name,$tag,$params=NULL){

if('Behavior'==substr($name,-8)){

//行為擴(kuò)展必須用run入口方法

$tag='run';

//file_put_contents('D:/1.txt',$name,FILE_APPEND);

$addon=new$name();

return$addon-$tag($params);

這個方法所做的就是先判斷行為配置中的設(shè)定的類名中是否有Behavior這個字符串,如果有就執(zhí)行一個叫run的方法

準(zhǔn)備工作差不多了。下面動手試試實例

方法一:通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為

我們先在Home/Conf下面準(zhǔn)備tags.php配置文件

returnarray(

'app_app'=array('Home\Behavior\DemoShowHelloWorldBehavior'),

根據(jù)這個配置文件,我們還得在Home/Behavior下面準(zhǔn)備DemoShowHelloWorldBehavior的類文件

namespaceHome\Behavior;

useThink\Controller;

*這個文件的類可以繼承Controller類這樣就可以使用assign方法

*這個方法框架里面:對你的返回值不理睬,只是用作判斷插件有沒有出錯

*出于某個目的,筆者對Hook::listen方法作了小修改讓他可以返回值,或許會有點(diǎn)用

classDemoShowHelloWorldBehaviorextendsController{

publicfunctionrun(){

$return_string='(Home\Behavior)fontDemoShowHelloWoldBehavior/fontisRunning....^_^!hr

$this-assign('behavior_assign','ThisisassignedbyfontDemoShowHelloWoldBehavior/font

return$return_string;

這個類文件,我們是繼承

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論