Thinkphp實戰利用鉤子使用行為擴充套件 (Hook)
上午研究了幾篇關於使用Hook實現鉤子的例項或詳細描述,總結了一些,所以打算寫兩個例項深入記憶。
注意事項:
注意事項:
1.觸發行為的關鍵方法是Hook類中的listen方法,它透過遍歷某個行為標籤下的所有行為,依次例項化並呼叫run方法
2.listen方法中,如果之前在配置檔案中開啟了DEBUG模式,則它會生成日誌記錄你的行為,這裡面牽涉到3.很多的IO操作,所以你的專案完成時建議取消DEBUG模式以提升速度
3.listen方法中,允許傳遞引數且只允許傳遞一個引數(傳多個可以用陣列呢),不過這個引數是引用傳值,所以只能傳入變數,傳入常量會報錯
4.最後,LibraryThinkBehavior.class.php,這個抽象類中只有一個抽象方法run(),在你的自己行為擴充套件中建議繼承它,儘管這不是必須的,但是這樣更加規範
例項1
1.在控制器中 Application->Home->Controller->IndexController.class.php 新增如下程式碼:
namespace HomeController;use ThinkController;use ThinkHook;//引用Hookclass IndexController extends Controller { public function index(){ Hook::add('ad','Behavior\adBehavior'); //手動註冊行為 ad 是註冊行為的名稱 後面的是路徑 接下來會說如何新建路徑中的檔案 hook::listen('ad',$parnam);//觸發行為 (這種是在控制器中觸發行為,還有在html頁面中觸發行為的 接下來就會看到) $parnam 為想要帶的引數 可以隨便定義 html中觸發的話請註釋這句 $this->display(); } }
2.來新建一個行為取名叫ad(廣告),->Library->Behavior->adBehavior.class.php
在裡面寫入程式碼:
namespace Behavior; class adBehavior{ function run($arg){ //$arg為帶過來的引數 可以在其中寫入自己的業務邏輯 行為必須執行run echo '我是一條'.$arg['name'].'廣告,'.$arg['value'].'代言'; //在此介紹下,run必須的 ,細心的會在Think核心找到Behavior.class.php裡面有這樣一句操蛋的話 abstract public function run(&$params); 你懂的 } }
3.在模板中使用 Application->Home->View->Index->index.html 新增如下程式碼:
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">How to used?
{:hook('ad', array('name'=>'AV','value'=>'*老師'))} //這個呢就是在頁面中觸發行為的方式了
4.還需要一步 如果我們想在模板上呼叫例如{:tag('example',array('name'=>'name','value'=>'value'))} 這樣的方法,首先我們到 ->Common->functions.php,你會搜到 tag 這個方法,複製下 tag 方法,修改為
function hook($hook,$params=array()){ ThinkHook::listen($hook,$params); //監聽一個鉤子}
例項1結束
例項2
例項一已經夠詳細了例項二是根據 修改的 比較簡潔 自動註冊就不在列舉
使用鉤子觸發行為擴充套件的流程:
1.自動註冊(Common/Conf/tags.php按格式自己新增),或者 手動註冊(類中方法如初始方法,呼叫Hook::add(tags,name));
2.寫好自己的行為類,類名以Behavior結尾,實現run方法
3.在需要新增行為的函式里 ,直接Hook::Listen(tags,prarm),注意一定要傳變數,不需要傳常量。
例子:
HomeIndexController;中程式碼:
public function index() { //這裡我是手動註冊的行為 Hook::add('ads','HomeBehaviorsadsBehavior');//ads 為行為名稱 後面的是路徑 hook::listen('ads',$param); //這個是監聽觸發行為 $param為傳遞的引數 可自定義 } }
新建 HomeBehaviorsadsBehavior.php
寫入程式碼:
OK,完成,剛剛超過下班2分鐘。愉快下班。
作者:jew丶
連結:?phpnamespace>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/36/viewspace-2802663/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 面試之實戰擴充套件Android面試套件
- Chrome 擴充套件的開發實戰Chrome套件
- Redis 實戰 —— 13. 擴充套件 RedisRedis套件
- php利用pcntl擴充套件實現高併發PHP套件
- Android - 利用擴充套件函式為Bitmap新增文字水印Android套件函式
- 利用 phpize 安裝 openssl 擴充套件PHP套件
- 實戰 | 執行緒池的幾種自定義擴充套件執行緒套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- 寫一個ThinkPHP SwaggerV3 擴充套件包PHPSwagger套件
- before-after-hook鉤子函式Hook函式
- 聊聊Dubbo - Dubbo可擴充套件機制實戰套件
- VSCode WebView外掛(擴充套件)開發實戰VSCodeWebView套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 讓子彈飛~利用 OPcache 擴充套件提升 PHP7 效能 | Laravel 篇opcache套件PHPLaravel
- 讓子彈飛~利用OPcache擴充套件提升PHP7效能 | laravel篇opcache套件PHPLaravel
- Springboot執行緒池的使用和擴充套件Spring Boot執行緒套件
- RabbitMQ實戰:擴充套件介紹與系列總結MQ套件
- 使用Apache Kafka對電子商務系統進行擴充套件的思路 - BogdanApacheKafka套件
- Source insight擴充套件宏使用套件
- 使用ctypes來擴充套件Python套件Python
- 使用cython擴充套件python庫套件Python
- PHP實現Bitmap的探索 - GMP擴充套件使用PHP套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 自動化擴充套件挑戰:ROI套件
- 使用 Cython 為 Python 編寫更快的 C 擴充套件Python套件
- 為Unity元件編寫擴充套件Unity元件套件
- Python為什麼能擴充套件Python套件
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- 釋出一個自己的composer擴充套件[實戰系列]套件
- spring4.1.8擴充套件實戰之八:Import註解Spring套件Import
- activiti通過擴充套件點重寫節點行為套件
- 使用udev擴充套件ASM磁碟組dev套件ASM
- 表單驗證使用擴充套件套件
- tonyenc加密擴充套件使用方法加密套件
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件
- SpringMVC 擴充套件SpringMVC套件