CodeIgniter:current_url显示问号

时间:2012-05-07 02:35:18

标签: codeigniter codeigniter-2 codeigniter-url

说我的页面已开启:

http://localhost/app1/profile/index/123/

current_url()的结果如下:

http://localhost/app1/?profile/index/123

不应该有?。问号似乎是由以下配置设置引起的:

$config['enable_query_strings'] = TRUE;

我需要在我的应用程序中启用查询字符串。任何想法我需要做什么?

编辑1:

此外,在URL确实有查询字符串的情况下,我还需要current_url来返回它。我希望Phil Sturgeon在这里的解决方案CodeIgniter current_url doesn't show query strings能帮到我。

我正在使用CI 2.1.0。

2 个答案:

答案 0 :(得分:1)

如上所述,$config['enable_query_strings']在没有支持$_GET(真的,没有)的情况下,在后面是Codeigniter中的“遗留”设置。

  

http://codeigniter.com/user_guide/general/urls.html

     

启用查询字符串

     

在某些情况下,您可能更喜欢使用查询字符串网址:
  index.php?c=products&m=view&id=345

c ===您的控制器名称 m ===您的方法名称

其余的是方法参数。这是一个非常误导性的描述,并且在其余的URL文档中根本没有提到其他设置或查询字符串。我从来没有听说有人真正使用过它。 CI默认带有$config['allow_get_array']= TRUE;,这正是您想要的。

您可以修改查询字符串支持的current_url()函数,只需创建application/helpers/MY_url_helper.php并使用它:

function current_url($query_string = FALSE)
{
    $CI =& get_instance();
    $current_url = $CI->config->site_url($CI->uri->uri_string());

    // BEGIN MODIFICATION
    if ($query_string === TRUE)
    {
        // Use your preferred method of fetching the query string
        $current_url .= '?'.http_build_query($_GET);
    }
    // END MODIFICATION

    return $current_url;
}

然后将其称为current_url(TRUE)以包含查询字符串。

答案 1 :(得分:0)

请勿使用:$config['enable_query_strings'] = TRUE;

请改用:$config['allow_get_array']= TRUE;

enable_query_strings不是您的想法,也不是用得太多。

要构建自己的查询字符串,请使用以下两种方法之一:

$query_string = http_build_query($this->input->get());
$query_string = $this->input->server('QUERY_STRING');

以及:

$lastseg_with_query = $lastseg.'?'.$query_string;

有关详情,请参阅此SO Q& A:URI Segment with Question Mark