Когда я сначала начал работать с CodeIgniter, не использование ДОБИРАЮТСЯ, действительно отбросил меня также. Но затем я понял, что можно моделировать, ПОЛУЧАЮТ параметры путем управления URI с помощью встроенного Класса URI. Это фантастически, и это заставляет Ваши URL выглядеть лучше.
Или если Вам действительно нужно, ПОЛУЧАЕТ работу, можно поместить это в контроллер:
parse_str($_SERVER['QUERY_STRING'], $_GET);
Который отложит переменные в ПОЛУЧИТЬ массив.
ДОБЕРИТЕСЬ параметры кэшируются веб-браузером, POST не. Таким образом с POST Вы не должны волноваться о кэшировании, так, чтобы был то, почему оно обычно предпочитается.
allesklar: Это является немного вводящим в заблуждение, поскольку сценарии и боты могут данные POST почти так же легко как отправление нормального запроса. Это не секрет, это - часть HTTP.
Even easier:
curl -X POST -d "param=value¶m2=value" http://example.com/form.cgi
that plugin's pretty cool though.
«разве вас не раздражают запросы на повторную отправку данных, если вы когда-нибудь нажмете назад после отправки формы»
, вы можете обойти это, выполнив перенаправление со страницы, которая обрабатывает отправку вашей формы на страницу успеха. последним «действием» была загрузка успешной страницы, а не отправка формы, что означает, что если пользователи нажимают F5, она просто перезагружает эту страницу и больше не отправляет форму.
Немного не по теме, но я искал функцию get в CodeIgniter, чтобы просто передать некоторые переменные между контроллерами и наткнуться на Flashdata.
см. : http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata позволяет создавать быстрые данные сессии, которые будут доступны только при следующем запросе сервера, а затем автоматически очищаются.
parse_str ($ _ SERVER ['QUERY_STRING'], $ _ GET);
У меня сработало ТОЛЬКО после того, как я добавил следующую строку в applications / config / config.php:
$ config ['uri_protocol'] = "PATH_INFO";
Я обнаружил, что параметры $ _GET не нужны в CI, но Facebook и другие сайты сбрасывают параметры GET в конец ссылок, что соответствует 404 для моего сайта CI !! Добавив строку выше в config.php, эти страницы заработали. Надеюсь, это поможет людям!
(из http://www.maheshchari.com/work-to-get-method-on-codeigniter/ )
MY_Input.php:
<?php
// this class extension allows for $_GET access
class MY_Input extends CI_input {
function _sanitize_globals()
{
// setting allow_get_array to true is the only real modification
$this->allow_get_array = TRUE;
parent::_sanitize_globals();
}
}
/* End of file MY_Input.php */
/* Location: .application/libraries/MY_Input.php */
MY_URI.php:
<?php
/*
| this class extension allows for $_GET access by retaining the
| standard functionality of allowing query strings to build the
| URI String, but checks if enable_query_strings is TRUE
*/
class MY_URI extends CI_URI{
function _fetch_uri_string()
{
if (strtoupper($this->config->item('uri_protocol')) == 'AUTO')
{
// If the URL has a question mark then it's simplest to just
// build the URI string from the zero index of the $_GET array.
// This avoids having to deal with $_SERVER variables, which
// can be unreliable in some environments
//
// *** THE ONLY MODIFICATION (EXTENSION) TO THIS METHOD IS TO CHECK
// IF enable_query_strings IS TRUE IN THE LINE BELOW ***
if ($this->config->item('enable_query_strings') === TRUE && is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
$this->uri_string = key($_GET);
return;
}
// Is there a PATH_INFO variable?
// Note: some servers seem to have trouble with getenv() so we'll test it two ways
$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
if (trim($path, '/') != '' && $path != "/".SELF)
{
$this->uri_string = $path;
return;
}
// No PATH_INFO?... What about QUERY_STRING?
$path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
if (trim($path, '/') != '')
{
$this->uri_string = $path;
return;
}
// No QUERY_STRING?... Maybe the ORIG_PATH_INFO variable exists?
$path = str_replace($_SERVER['SCRIPT_NAME'], '', (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : @getenv('ORIG_PATH_INFO'));
if (trim($path, '/') != '' && $path != "/".SELF)
{
// remove path and script information so we have good URI data
$this->uri_string = $path;
return;
}
// We've exhausted all our options...
$this->uri_string = '';
}
else
{
$uri = strtoupper($this->config->item('uri_protocol'));
if ($uri == 'REQUEST_URI')
{
$this->uri_string = $this->_parse_request_uri();
return;
}
$this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri);
}
// If the URI contains only a slash we'll kill it
if ($this->uri_string == '/')
{
$this->uri_string = '';
}
}
}
/* End of file MY_URI.php */
/* Location: .application/libraries/MY_URI.php */