行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。类似于AOP
编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP
编程的思想。所以,行为通常是和某个位置相关,行为的执行时间依赖于绑定到了哪个位置上。
1、创建behavior文件夹,创建行为类
<?php namespace app\index\behavior; class Test { /** * run函数必须存在 * @param $params * @return mixed */ public function run(&$params) { // 行为逻辑 return $params; } public function fun1(&$params){ return '4'. $params; } public function test1(){ return 1; } } // 如果注册的行为位标签不是自定义函数名称:fun1,没有run函数直接报错 // 如果注册的行为标签是自定义函数名称,没有run函数也会执行,与函数名一致且大写 //'Fun1' =>[ // 'app\\index\\behavior\\Test' //] 在tags。php中注册,这样子就不会报错了
2、在app/tags.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 <liu21st@gmail.com> // +---------------------------------------------------------------------- // 应用行为扩展定义文件 return [ // 应用初始化 'app_init' => [], // 应用开始 'app_begin' => [], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [ // 记录操作日志 // 'app\\index\\behavior\\AdminLog' ], 'test1' =>[ 'app\\index\\behavior\\Test' ], 'qq' =>[ 'app\\index\\behavior\\Demo' ], 'sms_notice' =>[ 'app\\index\\behavior\\Notice' ], 'sms' =>[ 'app\\index\\behavior\\Aa' ], // 'Fun1' =>[ // 'app\\index\\behavior\\Test' // ] ];
3、在控制器中调用行为类
<?php namespace app\index\controller; use app\common\controller\Bases; use think\Hook; //应用行为函数类:给某一个切面绑定相关行为就成了一种类AOP编程的思想。 //在application\tags.php文件注册 //该行为类写在behavior文件夹下 class Beha extends Bases { public function index(){ $title = '我是title11'; //这种使用方式是该行为没有在tags.php文件注册,使用add方式添加行为 Hook::add('FUn1','app\\index\\behavior\\Test'); dump(Hook::listen('FUn1',$title));die; } public function demo1(){ $title = 'iii'; dump(Hook::listen('test1',$title));die; } public function demo2(){ $params = ['sss']; Hook::listen("qq",$params); } public function demo3(){ $params = ['sss']; $result = Hook::listen('sms_notice', $params, null, true); dump($result);die; } public function demo4(){ $params = ['sss']; $result = Hook::listen('sms', $params, null, true); dump($result);die; } }