行爲整理連接php
鉤子至關於一個插件,在某些執行順序上插入進去。html
行爲能夠在寫app接口中對全部請求執行到控制器前 執行用戶權限判斷,sign驗證等,這樣就不用在每一個接口中判斷了thinkphp
例子:數組
在應用或模塊下建 behavior目錄,目錄內建行爲類文件Test.php(如下以home模塊爲例)app
namespace app\home\behavior;//注意應用或模塊的不一樣命名空間 class Test { public function run(&$params){ echo $params; } }
行爲定義完成後,就須要綁定到某個標籤位置才能生效,不然是不會執行的函數
home模塊下建tags.php文件將行爲綁定綁定(註冊)到app_init和zzzzz標籤上this
return [ 'app_init'=> [ 'app\\home\\behavior\\Test', //注意行爲的命名空間(下同) ], 'zzzzz'=> [//自定義標籤位 'app\\home\\behavior\\Test', ], //................. ];
控制器方法內須要的地方偵聽行爲(好比在隨便某個控制器的index方法中添加)spa
$params='ok';
\think\Hook::listen('app_init',$params);//參數爲變量(下同) \think\Hook::listen('zzzzz',$params);//自定義
訪問這個index方法 輸出 okok插件
例子2:好比咱們想在首頁加載廣告:日誌
1.在控制器中 Application->Home->Controller->IndexController.class.php
namespace Home\Controller; use Think\Controller; use Think\Hook;//引用Hook class IndexController extends Controller { public function index(){
//手動註冊行爲 ad 是註冊行爲的名稱 後面的是路徑 接下來會說如何新建路徑中的文件(也能夠在targs.php中配置自動註冊)
Hook::add('ad','Behavior\\adBehavior');
//觸發行爲 (這種是在控制器中觸發行爲,還有在html頁面中觸發行爲的 接下來就會看到) $parnam 爲想要帶的參數 能夠隨便定義
//hook::listen('ad',$parnam);//咱們不要在這觸發而是在html模板上觸發的話請註釋這句
$this->display(); } }
在應用或模塊下建 behavior目錄,目錄內建行爲類文件Test.php(如下以home模塊爲例)
namespace app\home\behavior;//注意應用或模塊的不一樣命名空間 class Test { public function run(&$params){ //$arg爲帶過來的參數 能夠在其中寫入本身的業務邏輯 行爲必須執行run echo '我是一條'.$params['name'].'廣告,'.$params['value'].'代言'; //在此介紹下,run必須的 ,細心的會在Think核心找到Behavior.class.php裏面有這樣一句操蛋的話 abstract public function run(&$params); 你懂的 } }
公共函數文件封裝下觸發行爲的方法:
function hooklisten($hook,$params=array()){ \Think\Hook::listen($hook,$params); //監聽一個鉤子 }
四、在模板中使用 Application->Home->View->Index->index.html 添加以下代碼:
<body> <h1>How to used?</h1> {:hooklisten('ad', array('name'=>'AV','value'=>'*老師'))} //這個呢就是在頁面中觸發行爲的方式了 </body>