zhenght 发表于 2016-8-25 17:19:25

ci钩子:将地址段解析为GET传值

ci钩子:可将path_info传值转为GET传值,并且method的参数也通过GET来传递
用途:接收SEO友好的地址传值。

$hook['pre_controller']=function(){
    global $params,$RTR;
    if(!$params)return;
    $_GET+=$RTR->uri->ruri_to_assoc();
    $rel=new ReflectionMethod($RTR->class,$RTR->method);
    $params=array();
    if($args=$rel->getParameters())
    {
      foreach($args as $arg)
      {
            if(isset($_GET[$arg->name]))
            {
                $params[$arg->name]=$_GET[$arg->name];
      }
    }
        }
        unset($cls,$rel);
};

例:
class Demo extends CI_Controller
{
    function ctrldemo($arg1)
    {
       echo 'arg1='.$arg1;               
       print_r($_GET);
    }
}
访问地址:
/demo/ctrldemo/test/1/arg1/2/pn/1.html
/demo/ctrldemo.html?test=1&arg1=2&pn=1
输出:
arg1=2
array(
'test'=>1,
'arg1'=>2,
'pn'=>1
)

注:使用之后传统的method传值方式将不可用,下面地址将会报错
/demo/ctrldemo/2
不会得到输出:
arg1=2
必须要
/demo/ctrldemo/arg1/2
如果有多个参数(包括get参数)则arg1的顺序不一定要放在第一位

Hex 发表于 2016-8-25 17:43:31

很赞啊!!
页: [1]
查看完整版本: ci钩子:将地址段解析为GET传值