Home >Backend Development >PHP Tutorial >Framework Thinkphp5 simple implementation behavior hook Hook

Framework Thinkphp5 simple implementation behavior hook Hook

不言
不言Original
2018-05-03 16:49:176037browse

这篇文章主要介绍了关于框架Thinkphp5  简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

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

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

下面直接进入步骤:

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

<?php
namespace app\api\behavior;
//行为类
class AopTest{

      //绑定api初始化
      public function apiInit(&$params){
            //参数获取
            $id = input(&#39;id&#39;);//获取请求参数
            $uid = session(&#39;UID&#39;);//获取session 登录uid
            
            //打印输出
            echo PHP_EOL;
            echo &#39;ip检查&#39;.$params.&#39; GET:&#39;.$id;
            echo &#39; uid=&#39;.$uid;
            echo PHP_EOL;
            
            
            //获取当前模块  控制器名 方法名称
            $request=  \think\Request::instance();
            $controller_name = $request->controller();
            $model_name = $request->module();
            $action_name = $request->action();
            echo &#39; controller_name=&#39;.$controller_name.&#39; model_name=&#39;.$model_name.&#39; action_name=&#39;.$action_name;
            
            //构建数组
            $data = array();
            $data[&#39;status&#39;] = 0;
            $data[&#39;msg&#39;] = &#39;没有权限&#39;;
            
            //exit(json_encode($data));//以json格式返回数据
      }
      
      //绑定api结束
      public function apiEnd(&$params){
            echo PHP_EOL;
            echo &#39;日志记录&#39;.$params;
            echo PHP_EOL;
      }
}

2,配置标签 \application\api\tags.php

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

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

// 应用行为扩展定义文件
return [
    //接口初始化
    &#39;api_init&#39;      => [&#39;app\\api\\behavior\\AopTest&#39;],
    &#39;api_end&#39;      => [&#39;app\\api\\behavior\\AopTest&#39;],
];

3,在要加入行为的类的方法内加入行为监听

<?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(&#39;UID&#39;,123);
      $id = input(&#39;id&#39;);
      $params1  = &#39;参数1&#39;;
      $res = Hook::listen(&#39;api_init&#39;,$params1);
      echo var_export($res, true);
      echo &#39;api index&#39;;
      
      $params2 = &#39;参数2&#39;;
      Hook::listen(&#39;api_end&#39;,$params2);
    }
}

4,访问查看输出效果:


5,文件分布示意



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

相关推荐:

thinkPHP5框架的分页查询功能实现方法

thinkphp5和swoole异步邮件群发实现方法


The above is the detailed content of Framework Thinkphp5 simple implementation behavior hook Hook. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn