如何使CodeIgniter接受“查询字符串”URL?

时间:2010-05-24 01:10:58

标签: php codeigniter codeigniter-url

根据CI的文档,CodeIgniter使用基于段的方法,例如:

example.com/my/group

如果我想找到一个特定的组(id = 5),我可以访问

example.com/my/group/5

在控制器中,定义

function group($id='') {
    ...
    }

现在我想使用传统的方法,CI称之为“查询字符串”URL。例如:

example.com/my/group?id=5

如果我直接转到此网址,我会找不到 404页面。那我怎么能启用呢?

10 个答案:

答案 0 :(得分:9)

为了可靠地使用查询字符串,我发现你需要做3件事

  1. application/config/config.php设置$config['enable_query_strings'] = true;
  2. 再次在application/config/config.php设置$config['uri_protocol'] = "PATH_INFO";
  3. 更改.htaccess以删除? (如果存在)重写规则
  4. 我使用以下

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    

答案 1 :(得分:4)

//Add this method to your (base) controller :
protected function getQueryStringParams() {
    parse_str($_SERVER['QUERY_STRING'], $params);
    return $params;
}


// Example : instagram callback action
public function callback()
{
    $params = $this->getQueryStringParams();
    $code = !empty($params['code']) ? $params['code'] : '';

    if (!empty($code))
    {
        $auth_response = $this->instagram_api->authorize($code);

        // ....  
    }

    // .... handle error
}    

答案 2 :(得分:1)

这可能对某些人有所帮助;将它放入控制器的构造函数中以逐个控制器地重新填充$ _GET(例如,如果要集成依赖于$ _GET的第三方库 - 例如大多数PHP OAuth库)。

parse_str(str_replace($_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']),$_GET);

答案 3 :(得分:1)

你可以改变 URI PROTOCOL

中的config file
  $config['uri_protocol']   = "ORIG_PATH_INFO"; 

  $config['enable_query_strings'] = FALSE;

它会接受查询字符串并允许您的网址。 为我工作:))

答案 4 :(得分:1)

<强> HTML

<a href="?accept=1" class="btn btn-sm btn-success">Accept</a>

控制器功能

if ($this->input->get('accept')!='')
{
    $id = $this->input->get('accept', TRUE );
    $this->camprequests->accept($id);
    redirect('controllername/functionname');
}

模型功能

public function accept($id)
{
    $data = array('status'=>'1');
    $this->db->where('id','1');

    if($this->db->update('tablename',$data)) {

        $this->session->set_flashdata("accpeted","<div class='col-sm-12 alert alert-success'>Accpeted successfully.</div>"); 

    } else { 

        $this->session->set_flashdata("accpeted","<div class='col-sm-12 alert alert-success'>Error..</div>");  
    }
}

答案 5 :(得分:0)

修改application/config.php行:

$config['enable_query_strings'] = FALSE;

改为使之成真。还有其他细节你也要注意。请参阅here

答案 6 :(得分:0)

在config.php文件中设置$config['enable_query_strings'] = TRUE;后,您可以将基于段的方法与查询字符串结合使用,但前提是您使用2个或更多变量(以“&amp;”分隔)。 “)在查询字符串中,如下所示:

example.com/my/group?id=5&var=something

See this answer了解更多信息。

答案 7 :(得分:0)

CodeIgniter可选择支持此功能,可以在application / config.php文件中启用。如果您打开配置文件,您将看到以下项目:

enter code here $config['enable_query_strings'] = FALSE;

$ config ['controller_trigger'] ='c'; $ config ['function_trigger'] ='m';

如果将“enable_query_strings”更改为“TRUE”,则此功能将变为活动状态。

答案 8 :(得分:0)

实际上已经过测试和确认

它适用于您喜欢的任何方法;让你自由地混合匹配查询字符串和/段方法(与之前的响应相反)

要么使用:

example.com/my/group/?id=5

(请注意尾随/之前?)。或者

 example.com/my/group/5 

(取决于路由器文件中的url模式定义)。或者甚至

example.com/index.php/?my/group/?id=5

(虽然看起来很尴尬)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

并在你的codigniter的config / config.php文件中,设置

$config['uri_protocol'] = 'AUTO';
$config['enable_query_strings'] = TRUE;

答案 9 :(得分:0)

我已经尝试了这些步骤,对我来说设置分页查询(codeigniter 3)是正确的

在控制器中:只需添加以下代码即可。

$config['enable_query_strings'] = TRUE;

$config['page_query_string'] = TRUE;

$config['query_string_segment'] = 'page'; // you can jot down what you want instead of page in this one. and you could get by this name your $_GET method. So, if you don't use this line, it will automatically create a query with "per_page" and this will be your query. 

相关链接: https://codeigniter.com/userguide3/libraries/pagination.html#customizing-the-pagination

即使要将自己的特定类添加到(通过分页创建的标签),也必须添加以下代码,以具有自己喜欢的分页链接样式。

$config['attributes'] = array('class' => 'page-link'); // this is the example of the above and you can write what you want instead of 'page-link' as the value of class.

当我们要将页面链接类作为boostrap样式添加到a标签时,这将非常有用。

结果:<a href="home?action=questions&amp;page=12" class="page-link" data-ci-pagination-page="5" dideo-checked="true">5</a>

如您所见,页面链接已添加到标签中。

相关链接: https://codeigniter.com/userguide3/libraries/pagination.html#adding-attributes-to-anchors