Не использует параметры $ _GET - PullRequest
0 голосов
/ 17 ноября 2009

При работе с CodeIgniter оказывается, что $ _GET отключен по умолчанию. Мне интересно, почему это так.

Часто я хочу создавать очень длинные поисковые запросы. Так, например, у меня есть форма, которая позволяет искать в базе данных по N различным полям. В коде воспламенителя, URL для отображения моего результата поиска будет:

http://mysite.com/field1/field2/field3/.../fieldN-1/fieldN

Таким образом, пример URL будет

http://mysite.com/shopping/toys/educational/age6-8/page1/sortbypriceinascendingorder/

Мне это не особо нравится, потому что:

1) что если я захочу добавить дополнительные параметры поиска в более позднее время, чтобы у нас было что-то вроде:

http://mysite.com/shopping/toys/education/age6-8/page1/sortbypriceinascendingorder/boys-only/in-stock

Мне не нравится, как я добавляю "только для мальчиков" и "в наличии" в конце сегментов страницы / сортировки URL. Это не правильно.

2) что если человек не использует сегмент «игрушка» и «образовательный»? Тогда URL выглядит неуклюже

http://mysite.com/shopping/all_products/all_categories/age6-8/page1/sortbypriceinascendingorder/

Разве не имеет смысла использовать параметры $ _GET для поиска, потому что тогда порядок, в котором вы размещаете параметры строки запроса (& field = value), не имеет значения? А пропуск параметра строки запроса автоматически означает «не выбран».

Ответы [ 4 ]

2 голосов
/ 18 ноября 2009

Вы также можете использовать другой разделитель для параметров поиска, например + (как это делают многие системы). Они передаются на один маршрут контроллера, где вы можете explode() по мере необходимости. Пример: http://http://mysite.com/shopping/toys+education+age8+etc

2 голосов
/ 17 ноября 2009

Во-первых, вы всегда можете включить переменные $ _GET, если хотите.

Кроме того, вы можете использовать такие параметры, как ../shopping/type:toys/cat:education/age:6-8/sort:price_asc, а затем проанализировать их в коде контроллера:

function shopping() {
  $args = func_get_args();
  foreach ($args AS $arg) {
    list($filter_name, $filter_value) = explode(':', $arg, 2);
    if ($filter_name == 'cat') {
      // set category filter to $filter_value (education)
    } elseif ($filter_name == 'type') {
      // set type filter to toys
    }
    // etc etc
  }
}
1 голос
/ 18 ноября 2009

В CodeIgniter можно использовать как строки запроса, так и сегменты, вот как:

В config.php установлено:

  • $ config ['uri_protocol'] = "PATH_INFO";
  • $ config ['enable_query_strings'] = TRUE;

В .htaccess используйте / после index.php вместо? в вашем правиле CI: RewriteRule ^ (. *) $ index.php / $ 1 [L]

1 голос
/ 17 ноября 2009

Причина, по которой они это делают, заключается в том, что это мешает вызову контроллеров, функций и параметров.

CI использует строку URI, чтобы сообщить «программе», что делать. Есть режим, который вы можете включить, который делает это:

www.example.com/controller/method/parameter

в это:

www.example.com/?c=controller&m=methods&p=parameter1&yourgetitem=yourgetvalue

Хотя не так красиво, но вы уверены, что МОЖЕТЕ делать с CI все что угодно; это просто требует некоторой настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...