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]? 和  方法是不是正在执行的方法   如果是的话执行   钩子中的方法

时间: 2024-10-28 10:06:31

CI 框架 hooks 的调用方法的相关文章

ci框架操作数据库基本方法

授课过程中如果涉及到文件夹或目录时,可使用缩进进行演示: application |-----libraries |-----xxx_helper.php system |-----libraries |-----url_helper.php --------------------------------------------------------------------------------------------------------------------------------

tp框架基础控制器调用方法

public function indd(){ //调用该控制器下的某个方法 $this ->index(); //跨控制器调用 $k = A("index");// 创建控制器对象 $k -> index(); //跨模块调用 $k = A("home/index"); $k -> index(); }

CI框架中 日志输出方法log_message()只允许输出字符串解决方案

1.修改CodeIgniter/index.php,添加如下: define('ROOTDIR',dirname(__FILE__).'/'); 2.修改CodeIgniter/application/config/config.php,如下: $config['log_threshold'] = 1; $config['log_path'] = ROOTDIR.'logs/'; 3.修改CodeIgniter/system/core/Common.php,如下: a.找到log_message

CI框架浅析(全篇)

业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包也就2M多,而且使用起来方便快捷,适用于一些简单的功能开发,以及做app 接口. 该框架整个流程图如下: li.li1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" } span.s1 { } span.s2 { }

各种demo——CI框架学习

寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controllers/hello.php 1 <?php 2 //放止用户直接通过路径来访问控制器,如果这样的话会显示找不到(封装) 3 if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 4 5 class Hello extends CI_Controller

CI框架 -- 核心文件 之 Hooks.php

CI框架可以实现在不修改系统核心文件的基础上来改变或增加系统的核心运行功能,那就是Hook,看看CI有哪些钩子: pre_system系统执行的早期调用.仅仅在benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它的过程. pre_controller在调用你的任何控制器之前调用.此时所用的基础类,路由选择和安全性检查都已完成. post_controller_constructor在你的控制器实例化之后,任何方法调用之前调用. post_controller在你的控制器

CI框架中一个类中调用另一个类中已经加载对象测试

controller.php 1 <?php 2 class CI_Controller { 3 4 private static $instance; 5 6 public function __construct() 7 { 8 self::$instance =& $this; 9 10 foreach (is_loaded() as $var => $class) 11 { 12 $this->$var =& load_class($class); 13 $obj

CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法

一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); 2.for循环判断即可 1 for($i = 0;$i < count($req);$i ++ ){ 2 $j = $this->load->get_post($req[$i],true); 3 if(empty($j)) 4 exit($req[$i].' 为空'); 5 $data[$

ci框架自定义数据库查询名称(方法)

适合刚接触PHP和ci框架的人,本人也是小白 原因:官方给的数据库查询方法可能不利于记忆使用,官方给的一些方法只能进行基础查询,每次复合查询都需要拼接条件,自己定义定义方法直接调用方法即可 操作步骤: 1.ci框架官网下载好解压后的文件夹会有application这个目录,在application目录下找到models子目录,在models子目录里建一个PHP文件(名字随便起,如Base_model.php) 这个文件里就是给你写自己定义的数据库查询方法,但开头要这样写(如下),自己定义的方法写