




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第thinkPHP3.2.2框架行為擴展及demo示例本文實例講述了thinkPHP3.2.2框架行為擴展。分享給大家供大家參考,具體如下:
首先介紹一下行為擴展類,本人愚鈍,還是借用tp手冊上的來說:
行為(Behavior)是一個比較抽象的概念,你可以想象成在應用執(zhí)行過程中的一個動作或者處理,在框架的執(zhí)行流程中,各個位置都可以有行為產生,例如路由檢測是一個行為,靜態(tài)緩存是一個行為,用戶權限檢測也是行為,大到業(yè)務邏輯,小到瀏覽器檢測、多語言檢測等等都可以當做是一個行為,甚至說你希望給你的網站用戶的第一次訪問彈出Hello,world!這些都可以看成是一種行為,行為的存在讓你無需改動框架和應用,而在外圍通過擴展或者配置來改變或者增加一些功能。
而不同的行為之間也具有位置共同性,比如,有些行為的作用位置都是在應用執(zhí)行前,有些行為都是在模板輸出之后,我們把這些行為發(fā)生作用的位置稱之為標簽(位),當應用程序運行到這個標簽的時候,就會被攔截下來,統一執(zhí)行相關的行為,類似于AOP編程中的“切面”的概念,給某一個切面綁定相關行為就成了一種類AOP編程的思想。
那下面就入正題,講解一下行為(Behavior)的實例
讓行為工作有兩種方式:
1.通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為
2.通過\Think\Hook::add(name,class_namespace)注冊一個行為,然后觸發(fā)(注冊函數必須在觸發(fā)函數之前)
在我們講解實例之前,很有必要先講講行為是怎么觸發(fā)的。
行為觸發(fā)靠的是\Think\Hook::listen(name)方法,那方法里面到底做了什么,我們先看看源碼:
*監(jiān)聽標簽的插件
*@paramstring$tag標簽名稱
*@parammixed$params傳入參數
*@returnvoid
*addbyyangligao2014/8/25
*listen個人覺得方法名稱取得不怎么好理解,看程序中就知道這個方法實際上就是看$tags中有沒有參數中的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;//筆者^_^自己添加的
這個方法里面記錄行為的一些運行狀態(tài)的值,函數最后一點筆者做了一點修改,只是讓這個方法有了一份返回值(而非返回空)
最重要的地方就是
$result=self::exec($name,$tag,$params);
這個地方就開始執(zhí)行所謂的行為了,先看看exec方法的源碼
*執(zhí)行某個插件
*@paramstring$name插件名稱
*@paramstring$tag方法名(標簽名)
*@paramMixed$params傳入的參數
*@returnvoid
*addbyyangligao2014/8/25
*exec執(zhí)行文件
staticpublicfunctionexec($name,$tag,$params=NULL){
if('Behavior'==substr($name,-8)){
//行為擴展必須用run入口方法
$tag='run';
//file_put_contents('D:/1.txt',$name,FILE_APPEND);
$addon=new$name();
return$addon-$tag($params);
這個方法所做的就是先判斷行為配置中的設定的類名中是否有Behavior這個字符串,如果有就執(zhí)行一個叫run的方法
準備工作差不多了。下面動手試試實例
方法一:通過在conf目錄下的tags.php文件配置行為通過\Think\Hook::listen(name);觸發(fā)行為
我們先在Home/Conf下面準備tags.php配置文件
returnarray(
'app_app'=array('Home\Behavior\DemoShowHelloWorldBehavior'),
根據這個配置文件,我們還得在Home/Behavior下面準備DemoShowHelloWorldBehavior的類文件
namespaceHome\Behavior;
useThink\Controller;
*這個文件的類可以繼承Controller類這樣就可以使用assign方法
*這個方法框架里面:對你的返回值不理睬,只是用作判斷插件有沒有出錯
*出于某個目的,筆者對Hook::listen方法作了小修改讓他可以返回值,或許會有點用
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學畢業(yè)java工程師面試題及答案
- 創(chuàng)業(yè)項目面試題及答案
- 血透室護理查房
- 維生素D缺乏佝僂病護理
- cnc面試試題及答案
- 術前胃管置入深度護理
- a2駕照科目一考試模擬考試試題及答案
- 水稻HTS2基因參與熱脅迫響應的分子機制研究
- 2025銀行筆試考試題庫及答案
- NAA80對結直腸癌細胞增殖遷移的影響及機制研究
- 2024年中國家具電商行業(yè)市場競爭格局及投資方向研究報告(智研咨詢)
- 中國現代文學史考試題庫及答案
- 煙葉烘烤特性及特殊煙葉烘烤技術培訓
- 物料報廢單完整版本
- 廣東省深圳市南山區(qū)2023-2024學年四年級下學期期末科學試題
- 01互聯網安全風險及其產生原因 教學設計 2023-2024學年蘇科版(2023)初中信息科技七年級下冊
- CJT156-2001 溝槽式管接頭
- 社工招聘筆試考試(含答案)
- 母嬰兒童照護智慧樹知到期末考試答案章節(jié)答案2024年上海健康醫(yī)學院
- 急危重癥護理學試題(含答案)
- 特殊教育送教上門課件
評論
0/150
提交評論