在正常的的程序之外想要改动少的增加一些别的功能
现在admin模块下的behavior下创建Ceshi.php文件
钩子里面的方法的命名规范 驼峰写法(注意:如果一个钩子名称绑定了多个行为,从左往右执行,如果中间那一层hook返回了false ,啧当前的钩子执行完这个行为之后的行为都无法被触发,但是原程序继续执行)
//Ceshi.php 钩子,当前的行为类演示多个行为的情景
<?
namespace app\admin\behavior;
class Ceshi
{
/**************行为类只有一个行为*********************/
/* public function run()
{
echo 'only one';
return true;
}*/
/**********************类里面有多个行为,按下面写**************************/
public function initTest($params)
{
echo 'this is hook 1';
dump($params);
return true;
}
public function initTest2($params)
{
echo 'this is hook 2';
dump($params);
return true;
}
}
1,动态绑定钩子
/*测试controller*/
<?
namespace app\admin\controller;
use think\facade\Hook;
class Index
{
//绑定多个行为类,动态绑定
public function getHooke()
{
//动态绑定加这个
Hook::add('init_test', ["app\\admin\\behavior\\Ceshi"]);
Hook::add('init_test2', "app\\admin\\behavior\\Ceshi");
//调用,当程序执行到这里时就会调用app\\admin\\behavior\\Ceshi里面的init_test行为方法
Hook::listen('init_test', ['name' => 'wawa']);
Hook::listen('init_test2', ['age' => 20]);
echo '成功';
}
}
2,配置文件绑定钩子直接运用应用下的钩子或者模块下的钩子,本文直接用的是app应用下的配置
打开app\tag.php 文件
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => [],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
//钩子名称映射
'init_test' => [
app\admin\behavior\Ceshi::class
],
'init_test2' => [
app\admin\behavior\Ceshi::class
],
];
调用直接看index.php的那个方法,也是listen