Я пытался выяснить, как включить $ _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);
Наслаждаться 🙂