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

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

11 голосов
/ 11 января 2010

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

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

Обратите внимание, я хочу сохранить URI-анализ и маршрутизацию в том виде, в каком они есть, просто просто используйте $ _GET.

Ответы [ 7 ]

14 голосов
/ 17 февраля 2010

Добавьте следующую библиотеку в свои библиотеки приложений. Он переопределяет поведение библиотеки ввода по умолчанию при очистке массива $ _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');
9 голосов
/ 11 января 2010

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

GET, POST и COOKIE Data

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

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

2 голосов
/ 04 апреля 2011

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

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

1 голос
/ 29 марта 2012

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

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

1 голос
/ 15 января 2011

На сервере, без 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
}

}
0 голосов
/ 27 ноября 2012

Из сообщения: CodeIgniter PHP Framework - необходимо получить строку запроса

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

/system/application/config/config.php 

И тогда вы можете просто получить строки запросов, как обычно, используя $ _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);

Наслаждайтесь: -)

0 голосов
/ 18 апреля 2012

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

...