# 行為和鉤子
1.系統定義鉤子順序
| 鉤子| 描述 |參數 |
| --- | --- | --- |
| app_init | 應用初始化標簽位 | 無 |
| app_begin | 應用開始標簽位 | 當前調度信息 |
| module_init | 模塊初始化標簽位 | 當前請求對象實例 |
| action_begin | 控制器開始標簽位 | 當前的callback參數 |
| view_filter | 視圖輸出過濾標簽位 | 當前模板渲染輸出內容 |
| app_end | 應用結束標簽位 | 當前響應對象實例 |
| response_end | 輸出結束標簽位(V5.0.1+) | 當前響應對象實例 |
| log_write | 日志write方法標簽位 | 當前寫入的日志信息 |
### 1.如何監聽
~~~
Hook::listen('鉤子名稱','參數(引用)','額外參數','是否一次有效返回值');
~~~
### 2.監聽系統鉤子
~~~
Hook::listen('module_init', $request);
~~~
### 3.demo
3.1定義行為
~~~
namespace app\demo\behavior;
class Hello
{
public function run(){
echo "hello world"."<br/>";
}
}
~~~
3.2配置tags指向行為
~~~
return [
'app_init'=>[
'app\demo\behavior\Hello',
],
];
~~~
3.3新建控制器
~~~
namespace app\demo\controller;
class Index extends Base
{
public function index(){
echo "this is index!";
}
}
~~~
輸出
hello world;
this is index!
### 4.demo2
4.1修改行為 3.1 改成
~~~
namespace app\demo\behavior;
class Hello
{
public function run(){
echo "hello world"."<br/>";
}
public function appInit(){
echo "this is app_init";
}
}
~~~
輸出
this is app_init;
this is index!
### 5.動態配置
~~~
Hook::add('鉤子名稱','行為定義','是否優先執行');
~~~
~~~
use think\Hook;
Hook::add('app_init',[
'\app\demo\behavior\Hello',
]);
~~~
### 6.自定義鉤子
~~~
$result = Hook::listen('controller_init', $this, $request, true);
~~~
- tp5
- thinkphp5Auth教程
- thinkphp5Auth類
- thinkphp5鉤子詳解
- 多語言
- 日常函數記錄
- register_shutdown_function
- number_format
- call_user_func
- call_user_func_array
- parse_str
- php數組
- chdir
- strtr
- pathinfo
- version_compare
- func_get_args
- stristr
- 常用環境變量
- php字符串操作
- php文件操作
- php時間操作
- phpcli
- php 替換
- php錯誤函數
- mysql
- from_unixtime
- 日期類型
- mysql 優化
- if
- 常用類
- 前端
- Seaslog日志
- composer
- 大型網站提速關鍵技術
- php插件機制
- 微信
- 每天一個linux
- memcache筆記
- 昂捷ERP筆記
- redis
- sphinex
- 我的學習路徑
- php技術雜項
- php反射
- php閉包
- php正則
- apache 重寫規則
- php異常處理
- php錯誤處理
- php ob緩存
- php 解析xml
- php curl介紹
- lamp
- lnmp
- http
- http緩存控制
- php命令行
- svn
- git
- mssql
- xml