根据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页面。那我怎么能启用呢?
答案 0 :(得分:9)
为了可靠地使用查询字符串,我发现你需要做3件事
application/config/config.php
设置$config['enable_query_strings'] = true;
application/config/config.php
设置$config['uri_protocol'] = "PATH_INFO";
我使用以下
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)
答案 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&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
php codeigniter pagination pagination-bootstrap pagination-in-query-based-paged