Согласно документам CI, CodeIgniter использует сегментный подход , например:
example.com/my/group
Если я хочу найти определенную группу (id = 5), я могу посетить
example.com/my/group/5
И в контроллере определите
function group($id='') { ... }
Теперь я хочу использовать традиционный подход, который CI называет URL-адрес строки запроса. Пример:
example.com/my/group?id=5
Если я перейду к этому URL прямо, я получаю 404 страницу не найден . Итак, как я могу включить это?
Для надежного использования строк запроса я обнаружил, что вам нужно сделать 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]
//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 }
Это может помочь некоторым людям; поместите это в конструктор вашего контроллера, чтобы повторно заполнить $ _GET на основе контроллера по контроллеру (например, если вы интегрируете стороннюю библиотеку, которая полагается на $ _GET – например, большинство библиотек PHP OAuth).
parse_str(str_replace($_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']),$_GET);
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>"); } }
Измените application/config.php
на строке:
$config['enable_query_strings'] = FALSE;
Вместо этого сделайте это правдой. Есть и другие детали, на которые вы должны обратить внимание. См. Здесь .
После установки $config['enable_query_strings'] = TRUE;
в вашем файле config.php вы можете использовать подход, основанный на сегментах, в сочетании с строками запроса, но только если вы используете две или более переменных (разделенных символом «&») в строке запроса следующим образом:
example.com/my/group?id=5&var=something
См. Этот ответ для получения дополнительной информации.
CodeIgniter дополнительно поддерживает эту возможность, которая может быть включена в вашем файле application / config.php. Если вы откроете свой файл конфигурации, вы увидите следующие элементы:
enter code here $config['enable_query_strings'] = FALSE;
$ config ['controller_trigger'] = 'c'; $ config ['function_trigger'] = 'm';
Если вы измените «enable_query_strings» на TRUE, эта функция станет активной.
Вы можете изменить URI PROTOCOL
в вашем config file
чтобы
$config['uri_protocol'] = "ORIG_PATH_INFO";
а также
$config['enable_query_strings'] = FALSE;
Он будет принимать строки запроса и разрешать ваши URL-адреса. Работал для меня 🙂
Это действительно проверено и подтверждено
Он работает с любым способом, который вам нравится; давая вам свободу смешать соответствие строкой запроса и / сегмента (в отличие от предыдущих ответов)
либо вы хотите использовать:
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]
и в файле config / config.php codigniter, установите
$config['uri_protocol'] = 'AUTO'; $config['enable_query_strings'] = TRUE;