Включение $ _GET в codeigniter

Я пытался выяснить, как включить $ _GET в CI.

Похоже, что структура преднамеренно уничтожает массив $ _GET, и для этого требуется серьезное вмешательство в основные классы. может ли кто-нибудь сказать, почему это так, и как его преодолеть?

Я хочу, чтобы разбор партитуры URI и маршрутизация были такими же, как и просто, просто есть $ _GET.

Добавьте в библиотеки приложений следующую библиотеку. Он отменяет поведение библиотеки входных данных по умолчанию для очистки массива $ _GET. Он позволяет смешивать сегменты URI и строку запроса.

Приложение / библиотеки / MY_Input.php

class MY_Input extends CI_Input { function _sanitize_globals() { $this->allow_get_array = TRUE; parent::_sanitize_globals(); } } 

Также необходимо изменить некоторые параметры конфигурации. Параметр uri_protocol необходимо изменить на PATH_INFO и '?' символ должен быть добавлен в список допустимых символов в URI.

приложение / Config / config.php

 $config['uri_protocol'] = "PATH_INFO"; $config['permitted_uri_chars'] = 'az 0-9~%.:_\-?'; 

Затем можно получить доступ к значениям, переданным через строку запроса.

 $this->input->get('x'); 

Из руководства CodeIgniter о безопасности :

Данные GET, POST и COOKIE

Данные GET просто запрещены CodeIgniter, поскольку система использует сегменты URI, а не традиционные строки запроса URL (если в файле конфигурации не включена опция строки запроса). Глобальный массив GET отключается классом Input во время инициализации системы.

Прочтите эту запись в форуме для возможных решений ( становится интересным с половины вниз по странице 1 ).

У меня недостаточно репутации, чтобы прокомментировать, но ответ Фила Штургера выше, это путь, если переключение на Codeigniter Reactor легко для вас.

Вы можете получить доступ к строке запроса с помощью $ _GET или $ this-> input-> get () без необходимости переопределения MY_Input или даже изменения файла config.php.

Я успел использовать эту единственную строку в своем контроллере. Он в основном перенаправляет URL-адрес запроса, не полагаясь на какие-либо специальные настройки CodeIgniter:

parse_str(array_pop(explode('?',$_SERVER['REQUEST_URI'],2)),$_GET);

На сервере без PATH_INFO (как и у меня) попробуйте следующее:

 parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET); 

Вы можете сказать это так:

 class Your_controller extends Controller { function Your_controller() { parent::Controller(); date_default_timezone_set('Asia/Jakarta'); // set my timezone parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET); } function test() { print_r($_GET); // here your $_GET vars } } 

Никогда не использовал $ _GET с CI, лучше изменить скриптовую логику для использования POST или $ this-> uri-> segment (), а затем для активных параметров $ _GET для меня

Из сообщения: CodeIgniter PHP Framework – нужно получить строку запроса

Ниже приведен полный рабочий пример того, как разрешить querystrings в Codeignitor, например, на платформе JROX. Просто добавьте это в свой файл config.php, расположенный по адресу:

 /system/application/config/config.php 

И тогда вы можете просто получить querystrings, как обычно, используя $ _GET или класс ниже

 $yo = $this->input->get('some_querystring', TRUE); $yo = $_GET['some_querystring']; 

Вот код, чтобы все это работало:

 /* |-------------------------------------------------------------------------- | Enable Full Query Strings (allow querstrings) USE ALL CODES BELOW |--------------------------------------------------------------------------*/ /* |---------------------------------------------------------------------- | URI PROTOCOL |---------------------------------------------------------------------- | | This item determines which server global should | be used to retrieve the URI string. The default | setting of 'AUTO' works for most servers. | If your links do not seem to work, try one of | the other delicious flavors: | | 'AUTO' Default - auto detects | 'PATH_INFO' Uses the PATH_INFO | 'QUERY_STRING' Uses the QUERY_STRING | 'REQUEST_URI' Uses the REQUEST_URI | 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO | */ if (empty($_SERVER['PATH_INFO'])) { $pathInfo = $_SERVER['REQUEST_URI']; $index = strpos($pathInfo, '?'); if ($index !== false) { $pathInfo = substr($pathInfo, 0, $index); } $_SERVER['PATH_INFO'] = $pathInfo; } $config['uri_protocol'] = 'PATH_INFO'; // allow all characters $config['permitted_uri_chars'] = ''; // allow all characters $config['enable_query_strings'] = TRUE; // allow all characters parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET); 

Наслаждаться 🙂