Я использую CodeIgniter уже более года. По большей части мне это очень нравится (я участвую в форуме и использую его во всех случаях, когда могу), но Я НЕНАВИЖУ, НАСТОЯЩИМ в этом утверждении в руководстве:
Уничтожает глобальный массив GET. поскольку
CodeIgniter не использует GET
строки, нет никаких оснований, чтобы
это.
Предположение, что вам никогда не понадобится GET в приложении CodeIgniter, является асинином! Уже через несколько дней мне пришлось иметь дело с пост-бэк-страницами из PayPal и ClickBank (я уверен, что есть еще миллион). Угадайте, что они используют GET !!!
Существуют способы остановить это GET-сжатие, но это вещи, которые имеют тенденцию портить другие вещи. Чего вы не хотите слышать, так это того, что вам нужно перекодировать все ваши представления, потому что вы включили строки запросов, и теперь ваши ссылки не работают! Внимательно прочитайте руководство по этому варианту!
Мне нравится (но не сработало, потому что установка REQUEST_URI в config.php сломала мой сайт) расширяет класс Input:
class MY_Input extends CI_Input
{
function _sanitize_globals()
{
$this->allow_get_array = TRUE;
parent::_sanitize_globals();
}
}
Но самый лучший способ - это проверить print_r ($ _ SERVER) по URL, где вам нужны переменные GET. Посмотрите, какой параметр протокола URI показывает ваши переменные GET и используйте его.
В моем случае я вижу, что мне нужно в
REQUEST_URI
// defeat stupid CI GET squashing!
parse_str($_SERVER['REQUEST_URI'], $_GET);
Это помещает вашу строку запроса обратно в суперглобальный $ _GET для этого экземпляра страницы (вам не нужно использовать $ _GET, это может быть любая переменная.)
EDIT
После публикации я обнаружил, что при использовании REQUEST_URI вы потеряете свой первый ключ массива строки запроса, если не удалите все до? Например, URL, такой как / controller / method? One = 1 & two = 2, заполнит массив $ _GET в этом примере массивом ('method? One' => 1, 'two' => 2). Чтобы обойти это, я использовал следующий код:
parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);
Полагаю, мне следовало привести пример, так что вот так:
class Pgate extends Controller {
function postback() {
parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);
$receipt = $this->input->xss_clean($_GET['receipt']);
}
}