【问题标题】:Codeigniter - configure enable_query_strings and form_openCodeigniter - 配置 enable_query_strings 和 form_open
【发布时间】:2011-07-14 13:39:42
【问题描述】:

我希望能够以这种方式对用户查询字符串。 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

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

我该如何解决这个问题?

任何帮助将不胜感激!

【问题讨论】:

    标签: model-view-controller codeigniter


    【解决方案1】:

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

    MY_Config 类扩展 CI_Config { 函数 __construct() { 父::CI_Config(); } 公共函数 site_url($uri='') { //这里从父类复制方法: 如果 ($uri == '') { if ($this->item('base_url') == '') { 返回 $this->item('index_page'); } 别的 { 返回 $this->slash_item('base_url').$this->item('index_page'); } } if ($this->item('enable_query_strings') == FALSE) { //这是禁用查询字符串的时候 } 别的 { if (is_array($uri)) { $i = 0; $str = ''; foreach ($uri as $key => $val) { $前缀 = ($i == 0) ? '' : '&'; $str .= $prefix.$key.'='.$val; $i++; } $uri = $str; } if ($this->item('base_url') == '') { //你需要删除“?”如果你的 $config['base_url']=='' 从这里 //return $this->item('index_page').'?'.$uri; 返回 $this->item('index_page').$uri; } 别的 { //或者如果你的 $config['base_url'] != '' 在这里删除它 //return $this->slash_item('base_url').$this->item('index_page').'?'.$uri; 返回 $this->slash_item('base_url').$this->item('index_page).$uri; } } } }

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

    【讨论】:

    • 这也会从你的 url helper 中的 redirect() 函数中删除问号,否则将无法正常工作。
    • 确保将文件命名为 MY_Config.php 而不是 MY_config.php。使用小写 c 可以在 Windows 上工作,因为 Windows 不区分大小写,但在 unix 机器上不起作用。
    【解决方案2】:

    更简单的方法可能是在您的 config.php

    中设置以下内容
    $config['enable_query_strings'] = FALSE;
    

    在我的情况下是解决方案。

    【讨论】:

      【解决方案3】:

      如果你想在你的 url 结构中使用查询字符串,那么你应该按以下顺序手动输入你的 url 结构:

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

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

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

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

      如果它不适合你,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2012-06-14
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 2012-12-16
        相关资源
        最近更新 更多