CI框架扩展路由钩子hooks改变自定义控制器和方法

由于历史项目代码是原生写的,很多地方比较烂,考虑的不周全。于是乎,我准备把代码转移到CI框架上面来。

但问题来了,历史代码中的控制器和方法名是通过POST传递过来的。如:

$_POST['oo'] = {'module':'user', 'mothed':'index'}

我需要控制下CI,并改变路由。

上代码:

/config/hooks.php

$hook['pre_system'] = array(
    'class' => 'reset_route',
    'function' => 'index',
    'filename' => 'reset_route.php',
    'filepath' => 'hooks',
    'params' => array(BASEPATH.'../com_party/libraries/', BASEPATH.'../com_party/events/')
);

/hooks/reset_route.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class reset_route {
    public function index()
    {
        $_SERVER['REQUEST_URI'] = 'user/index';
    }
}

即:

$module=$_POST['$module'];

$mothed=$_POST['mothed'];

$_SERVER['REQUEST_URI'] = $module.'/'.$mothed; 



覆盖DB

        $this->load->model('db_model');        
        $this->db = $this->db_model;
        $a = $this->db->get_one();
        echo $a;


 CI核心类CodeIgniter-》route->URI->_parse_request_uri()

$_SERVER['REQUEST_URI']



附:

以下是一组可用的挂钩点.

  • pre_system
    系统执行的早期调用.仅仅在benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它的过程.
  • pre_controller
    在调用你的任何控制器之前调用.此时所用的基础类,路由选择和安全性检查都已完成.
  • post_controller_constructor
    在你的控制器实例化之后,任何方法调用之前调用.
  • post_controller
    在你的控制器完全运行之后调用.
  • display_override
    覆盖_display()函数, 用来在系统执行末尾向web浏览器发送最终页面.这允许你用自己的方法来显示.注意,你需要通过 $this->CI =& get_instance() 引用 CI 超级对象,然后这样的最终数据可以通过调用$this->CI->output->get_output() 来获得。
  • cache_override
    可以让你调用自己的函数来取代output类中的_display_cache() 函数.这可以让你使用自己的缓存显示方法
  • post_system
    在最终渲染的页面发送到浏览器之后,浏览器接收完最终数据的系统执行末尾调用
http://codeigniter.org.cn/userguide2/general/hooks.html



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值