|
楼主 |
发表于 2009-4-8 07:57:08
|
显示全部楼层
解决办法:
1. 先扩展URI类
PHP复制代码 class MY_URI extends CI_URI
{
// 记录被调用过的最大 segment 序号,默认=2 (1=Controller, 2=action)
var $_goodseg = 2;
// HOOK: 记录曾经使用过的 segment 的最大序号,用来过滤垃圾 seg
function segment ($n, $no_result = FALSE)
{
if ($n > $this->_goodseg )
{
$this->_goodseg = $n;
}
return parent ::segment($n, $no_result);
}
// EXTEND: 只获取曾经被 ::segment() 方法调用过的最大序号之内的 segment 数组集合
function good_rsegment_array ()
{
return array_slice($this->rsegments, 0, $this->_goodseg );
}
} // END class MY_URI 复制代码
2. 再扩展OUTPUT类
PHP复制代码 class MY_Output extends CI_Output
{
// HOOK: 防止写垃圾缓存
function _write_cache ($output)
{
$CI = &get_instance ();
$t = $CI->uri->uri_string;
$CI->uri->uri_string = implode('/', $CI->uri->good_rsegment_array());
if ('/' == substr($t, 0, 1))
{
$CI->uri->uri_string = '/'.$CI->uri->uri_string;
}
parent ::_write_cache ($output);
// 恢复 uri string ,以供其他物件调用
$CI->uri->uri_string = $t;
}
} // END class MY_Output 复制代码
3. 带缓存的method要用$this->uri->segment(n)来获取uri参数
这样就在接口限制了生成垃圾缓存,而对于缓存实现,不用添加任何缓存判断代码 |
评分
-
查看全部评分
|