Как заставить CodeIgniter принимать URL-адреса "строки запроса"? - PullRequest
4 голосов
/ 24 мая 2010

Согласно документации 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 страницу, не найденную .Так как я могу включить это?

Ответы [ 9 ]

9 голосов
/ 24 мая 2010

Для надежного использования найденных строк запроса вам нужно сделать 3 вещи

  1. В application/config/config.php установить $config['enable_query_strings'] = true;
  2. Снова в application/config/config.php установить $config['uri_protocol'] = "PATH_INFO";
  3. Измените ваш .htaccess, чтобы удалить?(если присутствует) в правиле перезаписи

Я использую следующее

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
4 голосов
/ 09 мая 2012
//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
}    
1 голос
/ 02 декабря 2016

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>");  
    }
}
1 голос
/ 01 апреля 2013

Вы можете изменить URI PROTOCOL в своих config file на

  $config['uri_protocol']   = "ORIG_PATH_INFO"; 

и

  $config['enable_query_strings'] = FALSE;

Он будет принимать строки запроса и разрешать ваши URL.Работал на меня:)

1 голос
/ 29 апреля 2011

Это может помочь некоторым людям; поместите это в конструктор вашего контроллера, чтобы заполнить $ _GET для каждого контроллера отдельно (например, если вы интегрируете стороннюю библиотеку, которая использует $ _GET - например, большинство библиотек PHP OAuth).

parse_str(str_replace($_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']),$_GET);
0 голосов
/ 13 августа 2014

Это на самом деле проверено и подтверждено

Работает с любым методом, который вам нравится; предоставляя вам свободу совмещения в соответствии со строкой запроса и / сегментным подходом (в отличие от предыдущих ответов)

либо вы хотите использовать:

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;
0 голосов
/ 07 мая 2012

CodeIgniter дополнительно поддерживает эту возможность, которую можно включить в файле application / config.php.Если вы откроете свой конфигурационный файл, то увидите следующие элементы:

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

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

Если вы измените "enable_query_strings" на TRUE, эта функция станет активной.

0 голосов
/ 24 мая 2010

После установки $config['enable_query_strings'] = TRUE; в файле config.php вы можете использовать подход на основе сегментов в сочетании со строками запроса, , но только если вы используете 2 или более переменных (разделенных "&") в строка запроса как это:

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

См. Этот ответ для получения дополнительной информации.

0 голосов
/ 24 мая 2010

Изменить application/config.php в строке:

$config['enable_query_strings'] = FALSE;

Сделайте это вместо этого. Есть и другие детали, на которые вы должны обратить внимание. Смотри здесь .

...