一
<?php
namespace app\index\behavior;
use think\Request;
class Test
{
public function run(Request $request, $params)
{
echo '我是钩子函数';
}
}
class Index extends Controller
{
public function index()
{
Hook::add('app_init', 'app\\index\\behavior\\Test');
Hook::listen('app_init');
}
}
这样访问index控制器的index操作的时候会自动执行run钩子
二
class Test
{
public function run(Request $request, $params)
{
echo '我是狗子函数';
}
public function appInit($params)
{
echo '我是狗子函数2';
}
}
这时的run钩子会被appInit覆盖
三
public function index()
{
Hook::add('app_end', 'app\\index\\behavior\\Test');
//注意这里无需listen
}
public function appEnd($params)
{
echo '我是狗子函数3';
}
四
Hook::add('app_init', 'app\\index\\behavior\\Test');
Hook::listen('app_init');
Hook::add('app_end', 'app\\index\\behavior\\Test');
app_end钩子比app_init先执行
五
public function index()
{
//不绑定行为标签, 执行 app\index\behavior\Test行为类的run方法 并引用传入params参数
$result = Hook::exec('app\\index\\behavior\\Test','参数');
}
public function run(Request $request, $params)
{
echo '我是狗子函数'.$params;
}
六
return [
// 应用初始化
'app_init' => [
'app\\index\\behavior\\Test'
]
全局的绑定,无论运行哪个操作都会执行钩子