




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第thinkPHP3.2.2框架行為擴(kuò)展及demo示例本文實(shí)例講述了thinkPHP3.2.2框架行為擴(kuò)展。分享給大家供大家參考,具體如下:
首先介紹一下行為擴(kuò)展類,本人愚鈍,還是借用tp手冊上的來說:
行為(Behavior)是一個(gè)比較抽象的概念,你可以想象成在應(yīng)用執(zhí)行過程中的一個(gè)動(dòng)作或者處理,在框架的執(zhí)行流程中,各個(gè)位置都可以有行為產(chǎn)生,例如路由檢測是一個(gè)行為,靜態(tài)緩存是一個(gè)行為,用戶權(quán)限檢測也是行為,大到業(yè)務(wù)邏輯,小到瀏覽器檢測、多語言檢測等等都可以當(dāng)做是一個(gè)行為,甚至說你希望給你的網(wǎng)站用戶的第一次訪問彈出Hello,world!這些都可以看成是一種行為,行為的存在讓你無需改動(dòng)框架和應(yīng)用,而在外圍通過擴(kuò)展或者配置來改變或者增加一些功能。
而不同的行為之間也具有位置共同性,比如,有些行為的作用位置都是在應(yīng)用執(zhí)行前,有些行為都是在模板輸出之后,我們把這些行為發(fā)生作用的位置稱之為標(biāo)簽(位),當(dāng)應(yīng)用程序運(yùn)行到這個(gè)標(biāo)簽的時(shí)候,就會被攔截下來,統(tǒng)一執(zhí)行相關(guān)的行為,類似于AOP編程中的“切面”的概念,給某一個(gè)切面綁定相關(guān)行為就成了一種類AOP編程的思想。
那下面就入正題,講解一下行為(Behavior)的實(shí)例
讓行為工作有兩種方式:
1.通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為
2.通過\Think\Hook::add(name,class_namespace)注冊一個(gè)行為,然后觸發(fā)(注冊函數(shù)必須在觸發(fā)函數(shù)之前)
在我們講解實(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個(gè)人覺得方法名稱取得不怎么好理解,看程序中就知道這個(gè)方法實(shí)際上就是看$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;//筆者^_^自己添加的
這個(gè)方法里面記錄行為的一些運(yùn)行狀態(tài)的值,函數(shù)最后一點(diǎn)筆者做了一點(diǎn)修改,只是讓這個(gè)方法有了一份返回值(而非返回空)
最重要的地方就是
$result=self::exec($name,$tag,$params);
這個(gè)地方就開始執(zhí)行所謂的行為了,先看看exec方法的源碼
*執(zhí)行某個(gè)插件
*@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);
這個(gè)方法所做的就是先判斷行為配置中的設(shè)定的類名中是否有Behavior這個(gè)字符串,如果有就執(zhí)行一個(gè)叫run的方法
準(zhǔn)備工作差不多了。下面動(dòng)手試試實(shí)例
方法一:通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為
我們先在Home/Conf下面準(zhǔn)備tags.php配置文件
returnarray(
'app_app'=array('Home\Behavior\DemoShowHelloWorldBehavior'),
根據(jù)這個(gè)配置文件,我們還得在Home/Behavior下面準(zhǔn)備DemoShowHelloWorldBehavior的類文件
namespaceHome\Behavior;
useThink\Controller;
*這個(gè)文件的類可以繼承Controller類這樣就可以使用assign方法
*這個(gè)方法框架里面:對你的返回值不理睬,只是用作判斷插件有沒有出錯(cuò)
*出于某個(gè)目的,筆者對Hook::listen方法作了小修改讓他可以返回值,或許會有點(diǎn)用
classDemoShowHelloWorldBehaviorextendsController{
publicfunctionrun(){
$return_string='(Home\Behavior)fontDemoShowHelloWoldBehavior/fontisRunning....^_^!hr
$this-assign('behavior_assign','ThisisassignedbyfontDemoShowHelloWoldBehavior/font
return$return_string;
這個(gè)類文件,我們是繼承
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模塊化設(shè)計(jì)與兒童服裝市場的細(xì)分定位-洞察闡釋
- 教師情緒對教學(xué)效果的影響研究
- 節(jié)前安全大檢查匯報(bào)
- 安全生產(chǎn)經(jīng)費(fèi)投入
- 運(yùn)動(dòng)服飾智能化研究-洞察闡釋
- 申請安全生產(chǎn)許可證的條件
- 在線教育平臺實(shí)操教程從入門到精通
- 需求變更影響分析-洞察闡釋
- 智慧課堂中的師生互動(dòng)與心理建設(shè)
- 零售行業(yè)數(shù)據(jù)分析-洞察闡釋
- 知行合一-王陽明傳奇課件
- 鍋爐澆注料施工方案
- GB/T 17394.1-2014金屬材料里氏硬度試驗(yàn)第1部分:試驗(yàn)方法
- GB/T 1606-2008工業(yè)碳酸氫鈉
- 葛的栽培技術(shù)
- 《綠色建筑概論》整套教學(xué)課件
- 山東中醫(yī)藥大學(xué)2020-2021學(xué)年內(nèi)科護(hù)理學(xué)試題及答案2
- 2022年綿陽江油市社區(qū)工作者招聘考試模擬試題及答案解析
- 初中道德與法治學(xué)科教學(xué)經(jīng)驗(yàn)交流
- 工程測量、定位放線控制點(diǎn)復(fù)核記錄表
- 申辦出入境證件的函
評論
0/150
提交評論