如何在查询字符串和分段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');
}
这样就可以在两种模式下都接收到正确的参数的值了。
GET 传参跟 URI 分段传参形式上不一样,所以传递到控制器方法中的参数也不应该是一样的,因为 GET 传参是 key value 的形式,而分段是类似数组的形式,所以要使用一种互相都兼容的接收参数的形式。 Hex 发表于 2014-12-25 11:25
GET 传参跟 URI 分段传参形式上不一样,所以传递到控制器方法中的参数也不应该是一样的,因为 GET 传参是 k ...
我这样的处理好么?
dolphin 发表于 2014-12-25 11:39
我这样的处理好么?
我感觉这样略显冗余
Hex 发表于 2014-12-25 11:42
我感觉这样略显冗余
是的。我也这样认为。
需要在每个函数中这样处理参数感觉就很奇怪。
你说的兼容两个传参方式的接收参数的方法。
不知道怎么做。请指点一下。
dolphin 发表于 2014-12-25 11:49
是的。我也这样认为。
需要在每个函数中这样处理参数感觉就很奇怪。
我觉得应该定下规范才可以把两个不同的东西统一。
一般来说,我的做法是参数都使用 GET 方式接收,而 URI 分段只用于控制器方法,也就是 http://domain.com/index.php/控制器/方法?参数1=值1&参数2=值2
页:
[1]