




下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西有關(guān)離婚協(xié)議書常用
- 業(yè)務(wù)渠道推廣合作合同
- 跟崗協(xié)議書范本
- 歐美減產(chǎn)協(xié)議書
- 公司聘用會計勞動合同
- 避稅車位買賣合同協(xié)議
- 海外承包協(xié)議書
- 生活用水供應(yīng)合作合同協(xié)議
- 車位分期協(xié)議書范本
- 兒女贍養(yǎng)老人協(xié)議書
- (高清版)TDT 1015.1-2024 地籍?dāng)?shù)據(jù)庫 第1部分:不動產(chǎn)
- CJT156-2001 溝槽式管接頭
- 民宿承包合同協(xié)議書樣本
- 幼小銜接 每日一練
- 哈爾濱市木蘭縣文職輔警招聘考試真題
- 烈士陵園智慧管理系統(tǒng)
- 室上速心動過速治療
- 鑄就數(shù)字堅盾:網(wǎng)絡(luò)安全技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年青島工學(xué)院
- 蘆丁雞怎么養(yǎng)
- 幽門螺桿菌預(yù)防措施及治療
- MOOC 近世代數(shù)-南京大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論