2009-11-17 2 views
0

При работе с 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) что, если я хочу добавить дополнительные параметры поиска в более позднее время, так что у нас есть что-то вроде:

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

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

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

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

+0

Очень похоже на: http://stackoverflow.com/questions/334708/codeigniter-get-parameters-allowable –

ответ

2

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

2

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

Кроме того, вы можете использовать Params как ../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

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

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

www.example.com/controller/method/parameter 

в этом:

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

Не так хороша, хотя, но вы уверены, что можете делать все что нравится с CI; это просто требует некоторой настройки.

1

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

В конфигурации.php set:

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

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

Смежные вопросы