CodeIgniter 源码解读之 _remap

CodeIgniter 3.1.11 源码解读 专栏收录该内容
9 篇文章 0 订阅

_remap

童鞋们,之前在看源码时,大家有没有注意到 CodeIgniter.php 文件中,在URI路由处理完成的后,实例化控制器类及调用方法时,我们可以看到程序做了一下判断:

elseif (method_exists($class, '_remap'))

那这个为什么要介么判断类? _remap 介个方法有什么作用类?

如果,当前控制器类中存在 _remap 方法,则:

$params = array($method, array_slice($URI->rsegments, 2));
$method = '_remap';

然后,到最终实例化控制器类,调用方法时:

$CI = new $class();
...
call_user_func_array(array(&$CI, $method), $params);

也就是说,如果当前请求的控制器中,存在 _remap 方法,则程序会默认去请求 _remap 方法,下面我们来验证一下吧。我们先在某个控制器类中加一个 _remap 方法:

class Catalog extends CI_Controller {
	/**
	 * 新增 _remap 方法
	 */
	public function product_lookup($id)
	{
		print_r($id);
	}

	public function product_edit($product_type, $id)
	{
		print_r($product_type);
	}

	public function _remap($method, $params) {
		echo 'i am _remap function!';
	}
}

刚我这边浏览器输入 http://localhost:8100/product/12 敲回车后:
_remap 返回结果
果不其然,他会将请求直接交给 _remap 处理。接下来,我们来看看参数的接收:

public function _remap($method, $params) {
		echo $method .'<br>'; // product_lookup
		print_r($params); // Array ( [0] => 12 )
}

CI官网关于 _remap 说明

以上,就是 CI 提供的 重映射方法,方法我们 自定义 自己的路由规则。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值