dolphin 发表于 2014-12-25 10:45:06

如何在查询字符串和分段URL间自由切换?

我们知道CodeIgniter的URL一般是这样的:

example.com/class/function/ID


当我们启用查询字符串后,URL是这样的:


index.php?c=products&m=view&id=345


是否启用查询字符串,在config.php中设置:

$config['enable_query_strings'] = FALSE;


我的问题是,如果我需要我的程序可以在两种模式下切换。


那么在试图中所有使用到URL的地方,是不是都需要自己手动构建URL,像下面这样:



if($this->config->item('enable_query_strings') == "TRUE")
{
      $view_url = $this->config->item('base_url') . "index.php?c=view&id=" . $value['ID'];
}
else
{
   $view_url = site_url('view/' . $value['ID']);
}





有其他更好的解决办法么?


我尝试着扩展URL辅助函数,希望能写出一个函数自动处理这种情况:



if ( ! function_exists('xixi_url'))
{
        function xixi_url($uri = '')
        {
                $CI =& get_instance();
                if($CI->config->item('enable_query_strings') == "TRUE")
                {
                        return $CI->config->item('base_url') . "index.php?c=" . $uri;
                }
                else
                {
                        return $CI->config->site_url($uri);
                }
        }
}





很明显没能解决这个问题。求大神指点。

另外,在启用了查询字符串后,我们在控制器中只能使用get方式接收参数

我写了这么一个函数来处理:


if ( ! function_exists('xixi_argv'))
{
        function xixi_argv($argv = '', $argc = '')
        {
                $CI =& get_instance();
                if($CI->config->item('enable_query_strings') == "TRUE")
                {
                        return $CI->input->get($argc);
                }
                else
                {
                        return $argv;
                }
        }
}




在控制器的函数中这样调用:


public function search($search = "")
{
        $search = xixi_argv($search,'search');

}



这样就可以在两种模式下都接收到正确的参数的值了。






Hex 发表于 2014-12-25 11:25:21

GET 传参跟 URI 分段传参形式上不一样,所以传递到控制器方法中的参数也不应该是一样的,因为 GET 传参是 key value 的形式,而分段是类似数组的形式,所以要使用一种互相都兼容的接收参数的形式。

dolphin 发表于 2014-12-25 11:39:12

Hex 发表于 2014-12-25 11:25
GET 传参跟 URI 分段传参形式上不一样,所以传递到控制器方法中的参数也不应该是一样的,因为 GET 传参是 k ...

我这样的处理好么?

Hex 发表于 2014-12-25 11:42:49

dolphin 发表于 2014-12-25 11:39
我这样的处理好么?

我感觉这样略显冗余

dolphin 发表于 2014-12-25 11:49:06

Hex 发表于 2014-12-25 11:42
我感觉这样略显冗余

是的。我也这样认为。

需要在每个函数中这样处理参数感觉就很奇怪。

你说的兼容两个传参方式的接收参数的方法。


不知道怎么做。请指点一下。

Hex 发表于 2014-12-25 18:34:24

dolphin 发表于 2014-12-25 11:49
是的。我也这样认为。

需要在每个函数中这样处理参数感觉就很奇怪。


我觉得应该定下规范才可以把两个不同的东西统一。
一般来说,我的做法是参数都使用 GET 方式接收,而 URI 分段只用于控制器方法,也就是 http://domain.com/index.php/控制器/方法?参数1=值1&参数2=值2

页: [1]
查看完整版本: 如何在查询字符串和分段URL间自由切换?