Включение $_GET в codeigniter
Я пытался выяснить, как включить $_GET в CI.
Похоже, что структура преднамеренно уничтожает массив $_GET, и для этого требуется серьезное вмешательство в основные классы. может ли кто-нибудь сказать, почему это так и как его преодолеть?
Учтите, что я хочу, чтобы разбор партитуры и маршрутизации URI был таким же, как и просто, просто есть $_GET.
Ответы
Ответ 1
Добавьте в библиотеки приложений следующую библиотеку. Он отменяет поведение библиотеки входных данных по умолчанию для очистки массива $_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'] = 'a-z 0-9~%.:_\-?';
Затем можно получить доступ к значениям, переданным через строку запроса.
$this->input->get('x');
Ответ 2
В руководство CodeIgniter о безопасности:
Данные GET, POST и COOKIE
Данные GET просто запрещены CodeIgniter, поскольку система использует Сегменты URI, а не традиционные Строки запроса URL (если у вас нет опция строки запроса включена в вашем файл конфигурации). Глобальный массив GET отменяется классом Input во время системы инициализации.
Прочитайте эту запись в форуме для возможных решений (становится интересной с половины вниз на странице 1).
Ответ 3
У меня нет достаточной репутации, чтобы комментировать, но Ответ Фила Стерджона выше - это путь, если перейти на Codeigniter Reactor легко для вас.
Вы можете получить доступ к строке запроса с помощью $_GET или $this- > input- > get() без необходимости переопределения MY_Input или даже изменения файла config.php.
Ответ 4
На сервере без 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
}
}
Ответ 5
У меня был успех, используя эту единственную строку в моем контроллере. Он в основном перенаправляет URL-адрес запроса, не полагаясь на какие-либо специальные настройки CodeIgniter:
parse_str(array_pop(explode('?',$_SERVER['REQUEST_URI'],2)),$_GET);
Ответ 6
Никогда не использовать $_GET с CI, лучше изменить логику script для использования POST или $this- > uri- > segment(), а затем для активных параметров $_GET для меня
Ответ 7
Из сообщения: 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);
Наслаждайтесь: -)