Reputation: 5721
According to CI's docs, CodeIgniter uses a segment-based approach, for example:
example.com/my/group
If I want to find a specific group (id=5), I can visit
example.com/my/group/5
And in the controller, define
function group($id='') {
...
}
Now I want to use the traditional approach, which CI calls "query string" URL. Example:
example.com/my/group?id=5
If I go to this URL directly, I get a 404 page not found. So how can I enable this?
Upvotes: 5
Views: 39470
Reputation: 1
I have tried these steps and it was correct for me to set a query in pagination (codeigniter 3)
in controller: just add these codes.
$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.
related link: https://codeigniter.com/userguide3/libraries/pagination.html#customizing-the-pagination
Even, if you want to add your own specific class to the (a tags that are created by pagination), you must add the following code to have your own favorite style for pagination links.
$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.
This will be very useful when we want to add page-link class as boostrap style to the a tag.
result: <a href="home?action=questions&page=12" class="page-link" data-ci-pagination-page="5" dideo-checked="true">5</a>
as you see page-link was added to this a tag.
related link: https://codeigniter.com/userguide3/libraries/pagination.html#adding-attributes-to-anchors
phpcodeigniterpaginationpagination-bootstrappagination-in-query-based-paged
Upvotes: 0
Reputation: 1104
Html:
<a href="?accept=1" class="btn btn-sm btn-success">Accept</a>
Controller Function
if ($this->input->get('accept')!='')
{
$id = $this->input->get('accept', TRUE );
$this->camprequests->accept($id);
redirect('controllername/functionname');
}
Model Function
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>");
}
}
Upvotes: 1
Reputation: 585
This is actually tested and confirmed
It works with any method you like; giving you freedom to mix match the query string and / segment approach (as opposed to the previous responses)
either you want to use:
example.com/my/group/?id=5
(please note the trailing / before ?). OR
example.com/my/group/5
(depending on your url pattern definitions in the router file). OR EVEN
example.com/index.php/?my/group/?id=5
(though that looks awkward enough)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
and in you codigniter's config/config.php file, set
$config['uri_protocol'] = 'AUTO';
$config['enable_query_strings'] = TRUE;
Upvotes: 0
Reputation: 11
You may change
URI PROTOCOL
in your config file
to
$config['uri_protocol'] = "ORIG_PATH_INFO";
and
$config['enable_query_strings'] = FALSE;
It'll accept query strings and allow your URLs. Worked for me :)
Upvotes: 1
Reputation: 765
//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
}
Upvotes: 6
Reputation: 51
CodeIgniter optionally supports this capability, which can be enabled in your application/config.php file. If you open your config file you'll see these items:
enter code here $config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c'; $config['function_trigger'] = 'm';
If you change "enable_query_strings" to TRUE this feature will become active.
Upvotes: 0
Reputation: 11
This might help some people; put this into your controller's constructor to repopulate $_GET on a controller-by-controller basis (e.g. if you are integrating a third party lib that relies on $_GET - such as most PHP OAuth libraries).
parse_str(str_replace($_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']),$_GET);
Upvotes: 1
Reputation: 540
For reliable use of query strings I've found you need to do 3 things
application/config/config.php
set $config['enable_query_strings'] = true;
application/config/config.php
set $config['uri_protocol'] = "PATH_INFO";
I use the following
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Upvotes: 10
Reputation: 21575
After setting $config['enable_query_strings'] = TRUE;
in your config.php file, you can use the segment-based approach in conjunction with query strings, but only if you use 2 or more variables (separated by a "&") in the query string like this:
example.com/my/group?id=5&var=something
See this answer for more information.
Upvotes: 0