亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

thinkPHP3.2.2框架行為擴展及demo示例

2024-05-05 00:04:17
字體:
來源:轉載
供稿:網友

本文實例講述了thinkPHP3.2.2框架行為擴展。分享給大家供大家參考,具體如下:

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

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

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

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

讓行為工作有兩種方式:

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

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

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

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

/** * 監聽標簽的插件 * @param string $tag 標簽名稱 * @param mixed $params 傳入參數 * @return void *//** * add by yangligao 2014/8/25 * listen 個人覺得方法名稱取得不怎么好理解,看程序中就知道這個方法實際上就是看$tags中有沒有參數中的tag *   如果有,就觸發之; *   如果沒有,你懂的,過之(至少程序中是沒有做操作)。 */static public function listen($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_DEBUG && G($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 則中斷插件執行    return ;   }  }  if(APP_DEBUG) { // 記錄行為的執行日志   trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');  } } // return; //thinkphp原始的樣式 return $result;//筆者^_^自己添加的}

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

最重要的地方就是

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

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

 /**  * 執行某個插件  * @param string $name 插件名稱  * @param string $tag 方法名(標簽名)  * @param Mixed $params 傳入的參數  * @return void  */ /**  * add by yangligao 2014/8/25  * exec 執行文件  */ static public function exec($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這個字符串,如果有就執行一個叫run的方法

準備工作差不多了。下面動手試試實例

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

我們先在Home/Conf下面準備tags.php配置文件

<?phpreturn array(  'app_app' => array('Home/Behavior/DemoShowHelloWorldBehavior'),);

根據這個配置文件,我們還得在Home/Behavior下面準備DemoShowHelloWorldBehavior的類文件

<?phpnamespace Home/Behavior;use Think/Controller;/** * 這個文件的類可以繼承Controller類 這樣就可以使用assign方法 * 這個方法框架里面:對你的返回值不理睬,只是用作判斷插件有沒有出錯 * 出于某個目的,筆者對Hook::listen方法作了小修改 讓他可以返回值,或許會有點用 */class DemoShowHelloWorldBehavior extends Controller{ public function run(){  $return_string = '(Home/Behavior)<font>DemoShowHelloWoldBehavior</font> is Running....^_^!<hr>';  $this->assign('behavior_assign','This is assigned by <font>DemoShowHelloWoldBehavior</font>');  return $return_string; }}

這個類文件,我們是繼承的控制器,里面做了兩件事:

1.返回一個字符串

2.使用Controller方法的assign方法給模板賦值

然后我們來觸發這個行為,你只需要在控制器總寫上一下代碼以及在對應模板中輸出對應變量

$behaviorReturn = /Think/Hook::listen('app_app');
<div>{$behavior_assign}</div>

這樣頁面就會輸出行為類中assign的變量值了,行為類的返回值這里沒有打印,你有興趣可以打印看看哦

方法二:.通過/Think/Hook::add(name,class_namespace) 注冊一個行為,然后觸發(注冊函數必須在觸發函數之前)

這個與方法一唯一的區別就是他不用定義tags.php文件,取而代之的是一個php語句(如下):

/Think/Hook::add('app_app', 'Home//Behavior//DemoShowHelloWorldBehavior');

其他的操作都相同。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图美腿丝袜| 国语自产精品视频在线看| 2018日韩中文字幕| 亚洲区在线播放| 成人高清视频观看www| 亚洲国语精品自产拍在线观看| 久久久999精品| 欧美人与物videos| 国产一区二区三区三区在线观看| 欧洲一区二区视频| wwwwwwww亚洲| 午夜精品美女自拍福到在线| 欧美性videos高清精品| 亚洲欧美视频在线| 久久伊人色综合| 欧美老少配视频| 国产精品视频精品| 中文字幕在线看视频国产欧美在线看完整| 亚洲第一二三四五区| 国产一区二区欧美日韩| 欧美日韩国产一中文字不卡| 久久躁狠狠躁夜夜爽| 久久久精品国产| 成人一区二区电影| 国产精品香蕉在线观看| 久久久久成人网| 久久精品人人做人人爽| 久久av红桃一区二区小说| 青青草99啪国产免费| 欧美激情二区三区| 青青a在线精品免费观看| 亚洲国产精品久久久久| 不卡中文字幕av| 青草热久免费精品视频| 欧美日韩综合视频| 91国在线精品国内播放| 亚洲欧美第一页| 亚洲精品视频网上网址在线观看| 中国人与牲禽动交精品| 日韩成人在线播放| 久久综合国产精品台湾中文娱乐网| 久久久免费av| 亚洲第一页在线| 成人国产精品免费视频| 在线亚洲国产精品网| 欧美性xxxxhd| 欧美精品激情视频| 国产欧美日韩精品在线观看| 成人国内精品久久久久一区| 欧美日韩黄色大片| 97在线精品国自产拍中文| 日韩精品高清在线| 精品久久久久久国产| 欧美性资源免费| 97热在线精品视频在线观看| 国产精品美女在线| 国产精品视频公开费视频| 国产精品激情av在线播放| 精品亚洲夜色av98在线观看| 欧美—级a级欧美特级ar全黄| 亚洲最大的成人网| 国产成人在线一区二区| 精品国内产的精品视频在线观看| 国产91精品视频在线观看| 人妖精品videosex性欧美| 成年无码av片在线| 国产脚交av在线一区二区| 久久久精品免费视频| 麻豆乱码国产一区二区三区| 中文字幕久久久av一区| 在线视频日韩精品| 久久久久久久色| 黑人极品videos精品欧美裸| 亚洲欧美国内爽妇网| 日韩电影免费观看在线| 欧美性猛交xxxx偷拍洗澡| 国产精品久久久久久亚洲影视| 国产一区二区三区在线视频| 日韩av中文字幕在线免费观看| 欧美成人免费网| 69精品小视频| 成人国产精品久久久久久亚洲| 欧美午夜xxx| 日本成人在线视频网址| 久久影院中文字幕| 欧美尤物巨大精品爽| 亚洲高清不卡av| 久久久99免费视频| 亚洲国产精品小视频| 日韩欧美在线一区| 亚洲国产精品成人va在线观看| 日韩在线视频免费观看高清中文| 欧美成人sm免费视频| 国产美女直播视频一区| 久久99精品久久久久久琪琪| 亚洲人成绝费网站色www| 国产精品扒开腿做爽爽爽男男| 国产精品第2页| 久久精品国产精品| 久久精品视频导航| 久久国产精品影视| 欧美一区二区三区四区在线| 日韩电影免费观看在线| 91久久国产精品91久久性色| 国产精品精品视频一区二区三区| 欧美一区二区大胆人体摄影专业网站| 日韩精品在线观看一区| 91精品免费久久久久久久久| 亚洲国产欧美自拍| 久久99视频免费| 中文字幕日韩av电影| 欧美成人黄色小视频| 成人高清视频观看www| 欧美性猛交xxxx乱大交极品| 亚洲肉体裸体xxxx137| 美女精品视频一区| 91久久精品国产91久久性色| 久久香蕉国产线看观看网| 国产精品美乳在线观看| 成人久久精品视频| 精品久久久久久久大神国产| 日韩精品高清在线观看| 国产精品第8页| 欧美成人午夜视频| 国产欧美精品日韩精品| 高清一区二区三区日本久| 一区二区三区国产在线观看| 日韩欧美aⅴ综合网站发布| 久久久久久久久国产| 欧美激情18p| 91爱视频在线| 在线不卡国产精品| 久久久久久亚洲精品中文字幕| 久久成人人人人精品欧| 亚洲国产精品中文| 欧美精品精品精品精品免费| 欧美日韩一区二区三区| 国产精品入口免费视频一| 久久97久久97精品免视看| 大荫蒂欧美视频另类xxxx| 美女国内精品自产拍在线播放| 日本国产一区二区三区| 国内揄拍国内精品少妇国语| 日韩在线播放视频| 黑人巨大精品欧美一区免费视频| 91在线观看免费高清| 亚洲综合精品一区二区| 成人av电影天堂| 亚洲国产精品悠悠久久琪琪| 国产不卡精品视男人的天堂| 热久久美女精品天天吊色| 欧美在线视频导航| 亚洲国产日韩欧美在线图片| 国产一区二区免费| 麻豆乱码国产一区二区三区| 精品二区三区线观看| 亚洲福利精品在线| 欧美性猛交99久久久久99按摩| 在线视频中文亚洲| 国产精品日韩在线观看| 日韩电影网在线| 国产精品日韩在线观看| 欧美日韩在线视频一区二区| 久久久免费电影|