您的位置:首页 > 编程学习 > > 正文

thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)

更多 时间:2021-10-24 10:47:42 类别:编程学习 浏览量:2916

thinkphp5单例原理

Thinkphp5框架简单实现钩子Hook行为的方法示例

本文实例讲述了thinkphp5框架简单实现钩子(hook)行为的方法。分享给大家供大家参考,具体如下:

实现在一个方法开始和结束加入两个行为:api_init、api_end

框架的搭建和模块的建立这里就省略了,请不太熟练的同学自行学习。

下面直接进入步骤:

1,先创建一个行为类  \application\api\behavior\aoptest.php

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • <?php
  • namespace app\api\behavior;
  • //行为类
  • class aoptest{
  •   //绑定api初始化
  •   public function apiinit(&$params){
  •    //参数获取
  •    $id = input('id');//获取请求参数
  •    $uid = session('uid');//获取session 登录uid
  •    //打印输出
  •    echo php_eol;
  •    echo 'ip检查'.$params.' get:'.$id;
  •    echo ' uid='.$uid;
  •    echo php_eol;
  •    //获取当前模块 控制器名 方法名称
  •    $request= \think\request::instance();
  •    $controller_name = $request->controller();
  •    $model_name = $request->module();
  •    $action_name = $request->action();
  •    echo ' controller_name='.$controller_name.' model_name='.$model_name.' action_name='.$action_name;
  •    //构建数组
  •    $data = array();
  •    $data['status'] = 0;
  •    $data['msg'] = '没有权限';
  •    //exit(json_encode($data));//以json格式返回数据
  •   }
  •   //绑定api结束
  •   public function apiend(&$params){
  •    echo php_eol;
  •    echo '日志记录'.$params;
  •    echo php_eol;
  •   }
  • }
  • 2,配置标签 \application\api\tags.php

    这里要注意的是配置的key就是对应的行为类内的方法,如果行为类内只需要一个方法,默认用run方法,如果是多个方法则对应的标签的key,

    注: v5.0.4+ 版本以上,行为类的方法需要采用驼峰法命名 apiinit,如果在版本以下可以用 api_init

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • // 应用行为扩展定义文件
  • return [
  •  //接口初始化
  •  'api_init'  => ['app\\api\\behavior\\aoptest'],
  •  'api_end'  => ['app\\api\\behavior\\aoptest'],
  • ];
  • 3,在要加入行为的类的方法内加入行为监听。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • <?php
  • namespace app\api\controller;
  • use \think\hook;
  • class index
  • {
  •   //访问url http://app.tp5.com/index.php/api/index/index?id=5
  •  public function index()
  •  {
  •   session_start();
  •   session('uid',123);
  •   $id = input('id');
  •   $params1 = '参数1';
  •   $res = hook::listen('api_init',$params1);
  •   echo var_export($res, true);
  •   echo 'api index';
  •   $params2 = '参数2';
  •   hook::listen('api_end',$params2);
  •  }
  • }
  • 4,访问查看输出效果:

    thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)

    5,文件分布示意

    thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)

    简单的实现了一下,希望给想了解的同学一点启发。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    原文链接:https://blog.csdn.net/morning99/article/details/80169844

    您可能感兴趣