Codeigniter - 配置enable_query_strings和form_open

时间:2011-03-13 18:30:00

标签: model-view-controller codeigniter

我希望能够以这种方式用户查询字符串。 Domain.com/controller/function?param=5&otherparam=10

在我的配置文件中,我有

$config['base_url'] = 'http://localhost:8888/test-sites/domain.com/public_html';
$config['index_page'] = '';
$config['uri_protocol'] = 'PATH_INFO';
$config['enable_query_strings'] = TRUE;

我得到的问题是form_open会自动在我的网址上添加问号(?)。

所以,如果我说:

echo form_open('account/login');

它吐出:http://localhost:8888/test-sites/domain.com/public_html/?account/login

请注意它在“帐户”之前添加的问号。

我该如何解决这个问题?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

问题的根源在CI_Config类所在的Core Config.php文件中。当您尝试使用form_open函数时,表单助手使用方法site_url()。 解决方案是使用您自己的类覆盖此类。如果您使用CI< 2.0然后在application / libraries / MY_Config.php中创建扩展类,否则如果CI> = 2.0,则扩展类转到application / core / MY_Config.php。 然后,您需要重新定义方法site_url()。

class MY_Config extends CI_Config
{
   function __construct()
   {
      parent::CI_Config();
   }

   public function site_url($uri='')
   {
      //Copy the method from the parent class here:
      if ($uri == '')
      {
         if ($this->item('base_url') == '')
     {
        return $this->item('index_page');
     }
     else
     {
        return $this->slash_item('base_url').$this->item('index_page');
     }
      }

      if ($this->item('enable_query_strings') == FALSE)
      {
         //This is when query strings are disabled
      }
      else
      {
         if (is_array($uri))
     {
        $i = 0;
        $str = '';
        foreach ($uri as $key => $val)
        {
           $prefix = ($i == 0) ? '' : '&';
           $str .= $prefix.$key.'='.$val;
           $i++;
        }
            $uri = $str;
         }
         if ($this->item('base_url') == '')
     {
            //You need to remove the "?" from here if your $config['base_url']==''
        //return $this->item('index_page').'?'.$uri;
            return $this->item('index_page').$uri;
     }
     else
     {
            //Or remove it here if your $config['base_url'] != ''
        //return $this->slash_item('base_url').$this->item('index_page').'?'.$uri;
            return $this->slash_item('base_url').$this->item('index_page).$uri;
     }
      }
   }
}

我希望这会有所帮助,我认为您使用的是未正式发布的CI 2.0,这已在官方CI 2.0版本中删除

答案 1 :(得分:2)

更简单的可能是在 config.php

中设置关注
$config['enable_query_strings'] = FALSE;

我的情况是解决方案。

答案 2 :(得分:1)

如果要在网址结构中使用查询字符串,则应按以下顺序手动键入网址结构:

<domain.com>?c={controller}&m={function}&param1={val}&param2={val}

在相应控制器的操作中,您应该将参数设为$_GET['param1']

现在你的代码应该是这样的

form_open(c=account&m=login&param1=val)

如果它对您不起作用,请告诉我。