不使用$ _GET参数

时间:2009-11-17 19:49:12

标签: php codeigniter get

在使用CodeIgniter时,默认情况下会禁用$ _GET。我想知道为什么会这样。

很多时候,我想构建很长的搜索查询。例如,我有一个表单,允许您通过N个不同的字段搜索数据库。在代码点火器中,显示我的搜索结果的网址是:

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

所以一个示例网址是

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

我不喜欢我在网页的末尾添加“仅限男孩”和“有库存”/网址的排序部分。感觉不对。

2)如果一个人不使用“玩具”部分和“教育”部分怎么办?然后网址看起来有点笨拙

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

使用$ _GET参数进行搜索更有意义,因为查询字符串参数(& field = value)的顺序无关紧要?省略查询字符串参数意味着“未选择”。

4 个答案:

答案 0 :(得分:2)

首先,如果您愿意,可以随时启用$ _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 :(得分:2)

您还可以为搜索参数使用不同的分隔符,例如+(与许多系统一样)。这些传递到单个控制器路由,您可以根据需要explode()。示例:http://http://mysite.com/shopping/toys+education+age8+etc

答案 2 :(得分:1)

为什么他们这样做是因为它干扰了控制器,函数和参数的调用。

CI使用URI字符串告诉“程序”要做什么。您可以启用一种模式:

www.example.com/controller/method/parameter

进入这个:

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

虽然不是很漂亮,但你确定可以用CI做任何你喜欢的事情;它只是需要一些调整。

答案 3 :(得分:1)

可以在CodeIgniter中使用查询字符串和段,具体如下:

在config.php中设置:

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

在.htaccess中使用a / after index.php而不是?你的CI规则:RewriteRule ^(。*)$ index.php / $ 1 [L]