CI 框架 hooks 的调用方法
流程:在hooks中写一个类 , 在system/core/CodeIgniter.php 判断什么时候执行 hooks中的类 涉及到了php反射获取类 方法 方法中的注释
钩子的介绍 :

启用 钩子

定义钩子

例子:hooks tokenverify.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of tokenverify
*
* @author root
*/
class TokenVerify {
// Codeigniter instance
protected $_ci;
// Instance of this class
public static $instance;
// Action statics
public static $actions;
public static $current_action;
public static $run_actions;
// Plugins
public static $plugins_pool;
public static $plugins_active;
// Directory
public $plugins_dir;
// Error and Message Pools
public static $errors;
public static $messages;
public function __construct($params = array()) {
// Codeigniter instance
$this->_ci = & get_instance();
$this->_ci->load->database();
}
/**
* Instance
* The instance of this plugin class
*
*/
public static function instance() {
if (!self::$instance) {
self::$instance = new TokenVerify();
}
return self::$instance;
}
/*
* 检测用户端token值是否合法,并转换为用户信息
* @param $token string token的值
* */
public function UserTokenVerify() {
$token = $this->_ci->input->post_get('token', FALSE);
if (empty($token)) {
show_error('token is error');
} else {
$token = base64_decode($token);
$this->_ci->load->model('User_model');
$user_data = $this->_ci->User_model->check_token($token);
// d($user_data);
if ($user_data) {
$this->_ci->user_id = $user_data->user_id;
} else {
show_error('token is error');
}
}
}
/*
* 检测医生端token值是否合法,并转换为用户信息
* @param $token string token的值
* */
public function DoctorTokenVerify() {
$token = $this->_ci->input->post_get('token', FALSE);
if (empty($token)) {
show_error('token is error');
} else {
$token = base64_decode($token);
$this->_ci->load->model('Doctor_model');
$doctor_data = $this->_ci->Doctor_model->check_token($token);
if ($doctor_data) {
$this->_ci->doctor_id = $doctor_data->user_id;
} else {
show_error('token is error');
}
}
}
}
config/hooks.php
$hook['UserTokenVerify'] = array(//用户token验证
'class' => 'TokenVerify',
'function' => 'UserTokenVerify',
'filename' => 'tokenverify.php',
'filepath' => 'hooks'
);
$hook['DoctorTokenVerify'] = array(//医生token验证
'class' => 'TokenVerify',
'function' => 'DoctorTokenVerify',
'filename' => 'tokenverify.php',
'filepath' => 'hooks'
);

/*
* ------------------------------------------------------
* Is there a "pre_controller" hook?
* ------------------------------------------------------
*/
$EXT->call_hook('pre_controller');
/*
* ------------------------------------------------------
* Instantiate the requested controller
* ------------------------------------------------------
*/
// Mark a start point so we can benchmark the controller
$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');
$CI = new $class();
$ref_class = new ReflectionClass($class);//建立这个类的反射类
$methods = $ref_class->getMethods();//获取所有的方法
foreach($methods as $function){
$doc=$function->getDocComment();//获取注释
$ref_method=$function->getName();
//$CI->router->fetch_method(); 正在执行的方法
if(strpos($doc,'[UserTokenVerify]')&&$ref_method===$CI->router->fetch_method()){
$EXT->call_hook('UserTokenVerify');
}
if(strpos($doc,'[DoctorTokenVerify]')&&$ref_method===$CI->router->fetch_method()){
$EXT->call_hook('DoctorTokenVerify');
}
}
解释 首先看看 注释里有[UserTokenVerify]? 和 方法是不是正在执行的方法 如果是的话执行 钩子中的方法
CI 框架 hooks 的调用方法的更多相关文章
- tp框架基础控制器调用方法
public function indd(){ //调用该控制器下的某个方法 $this ->index(); //跨控制器调用 $k = A("index");// 创建控 ...
- CI框架中 日志输出方法log_message()只允许输出字符串解决方案
1.修改CodeIgniter/index.php,添加如下: define('ROOTDIR',dirname(__FILE__).'/'); 2.修改CodeIgniter/application ...
- CI框架之HOOKS使用流程及原理
Ci框架中Hooks可以理解:在框架的执行流程过程中,允许开发者在固定的某些时间点上(如:调用控制器前,调用控制器后等时间点上),调用其他函数来扩充CI框架执行流程的一种方法.技术上来就是通过 ...
- CI框架浅析(全篇)
业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包 ...
- CI框架浅析
CI框架浅析(全篇) 业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很 ...
- 各种demo——CI框架学习
各种demo——CI框架学习 寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...
- CI框架 -- 核心文件 之 Hooks.php
钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...
- CI框架源码学习笔记5——Hooks.php
接着Benchmark.php往下看,下一个引入的文件是Hooks.php,我们称之为钩子.它的目的是在不改变核心文件的基础上,来修改框架的内部运作流程.具体使用方法参见手册http://codeig ...
- CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法
一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); ...
随机推荐
- osgOcean测试
#include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osgGA/TrackballManipu ...
- 分页加载的Fragment
package com.z.fragment; import android.os.Bundle; import android.os.Environment; import android.supp ...
- LeetCode OJ 119. Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...
- 如何在Excel中少犯二(I)
作者:何明科链接:https://zhuanlan.zhihu.com/p/23472480来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 收到不少建议,要求开知乎Li ...
- AVFoundation下的视频分帧处理
// // ViewController.m // VideoFrame // // Created by wiseman on 16/1/27. // Copyright (c) 2016年 wis ...
- mysql字符集问题
背景:数据库表信息乱码问题 影响:数据库连接初始化中断 原因:init_connect参数设置问题,参数为不可执行语句. 1.1 DB字符集参数 #数据库中的字符集设置(以下全部为修改过后的结果) m ...
- JPA 系列教程11-复合主键-2个@Id
复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 CREATE TABLE `t_airline ...
- MySQL python组件安装
可使用pip进行安装 pip install MySQL-python 如出现以下错误 _mysql.c::: 错误:my_config.h:没有那个文件或目录 _mysql.c::: 错误:mysq ...
- Apriori算法-数组-C语言
原文地址:http://blog.csdn.net/liema2000/article/details/6118423 #include<stdio.h>typedef struct { ...
- [转]关于Socket粘包问题
这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通 ...